1.快速排序[基于分治思想]

  • 算法主要步骤

    • a.确定分界点x:q[l]、q[(l+r)/2]、q[r]、随机选择一个数
    • b.调整区间[重点]:
      • (1).使得左半边区间的数都小于等于x
      • (2).使得右半边区间的数都大于等于x
    • c.递归:递归处理左、右两边区间
  • 双指针法实现快速排序:无需开辟额外空间
  • 注意:边界问题

2.代码模板

#include <iostream>
using namespace std;const int N = 1e6 + 10;int n;  // 键盘输入数组元素个数int q[N];void quick_sort(int q[], int l, int r)
{if(l >= r) return;// 1.确定分界点xint x = q[l + r >> 1], i = l - 1, j = r + 1;  // 2.调整区间while(i < j){do i++; while(q[i] < x);do j--; while(q[j] > x);if(i < j) swap(q[i], q[j]);}// 3.递归处理quick_sort(q, l, j);quick_sort(q, j + 1, r);
}int main(){scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d", &q[i]);quick_sort(q, 0, n-1);for(int i = 0; i < n; i++) printf("%d ", q[i]);return 0;
}

快速排序原理及代码模板相关推荐

  1. 四种排序:选择,插入,冒泡,快速排序原理及其对应的时间、空间复杂度解析

    四种排序:选择,插入,冒泡,快速排序原理及其对应的时间空间复杂度 首先,在了解四种排序之前,让我们来了解一下什么是时间复杂度和空间复杂度. 时间复杂度:算法的时间复杂度是一个函数,它定性描述该算法的运 ...

  2. 整数二分查找原理及代码模板

    1.整数二分算法原理 ps:数组具有单调性,则一定可以使用整数二分算法:但是,能够使用整数二分算法的数组,数组未必具有单调性. 整数二分算法的本质:给定一个区间,在区间中定义了某种性质.该性质在区间的 ...

  3. 【数据结构】对快速排序原理的理解(图解,通俗易懂)

    学习数据结构时,书本上直接给出了快速排序的过程以及代码,对其原理解释的不够详细,琢磨代码后,发现其原理其实十分简单,简述如下: (1)在待排序列中找一个"中枢元素"(书本上默认取序 ...

  4. 快速排序原理及Java实现

    https://blog.csdn.net/jianyuerensheng/article/details/51258374 1.基本思想: 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排 ...

  5. 快速排序原理以及java实现

    原理:选择一个关键值作为基准值.比基准值小的都在左边序列(无序的),比基准值大的都在右边(无序的).一般选择序列的第一个元素. 一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位 ...

  6. 【排序算法】快速排序原理及Java实现

    1.基本思想: 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的.快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较 ...

  7. python 快速排序 详解_数据结构与算法:快速排序(原理讲解+python实现)

    快速排序 快速排序是一种基于分治法(Divide and Conquer)的排序算法 它之所以称为快速排序是因为它的平均时间复杂度为O(nlogn),最坏情况下是O(n2) 但是这样的情况不常见 一般 ...

  8. 一图解析JavaScript快速排序原理,看了就不会忘~~

    时隔一年(当时是2020.05.02),再看当初写的快排,只能说能排序,但是性能比较差: 1,选取比较元素的时候,没必要浪费两次数学计算去取中间值!也就是这个是没必要的: const middleIn ...

  9. 归并排序原理及代码模板

    1.归并排序[基于分治思想] 算法主要步骤: a.确定区间的分界点即区间[l, r]的中间位置:mid = l + r >> 1,分成左.右两边: b.递归排序左边.右边: c.将左.右两 ...

最新文章

  1. Comet OJ - Contest #2题解
  2. 被七牛云OSS对象存储测试域名回收后正确数据迁移姿势!
  3. RV1108之MiniGui显示参数配置
  4. 高中物理公式、规律汇编表
  5. 超详综述 | 基于深度学习的命名实体识别
  6. 图像处理理论(一)——直方图、二值化、滤波基础
  7. 十、Linux文件系统基本操作(mount挂载,umount卸载)
  8. 共享可写节包含重定位_今年双11好房也打折!贝壳兰州站“11.11新房节” 5日开启...
  9. Docker操作补充
  10. python interactive slider_python3----练习题(过滑块验证)
  11. Echarts数据grid直角坐标系(xAxis、yAxis)详解
  12. centos 截图命令 screenshot
  13. 解码斯坦福开源狗DogGo--附硬件清单、源码、图纸、论文
  14. linux系统下Gaussian16和Gaussian view6的详细安装步骤
  15. 西奥电梯服务器无响应,干货│西奥电梯故障分析和技术文件
  16. 致敬科比,实现查询科比每赛季数据的Web服务器
  17. docker重启参数--restart=always的作用
  18. c语言最长良序字符串,C语言高效编程的4个方法
  19. HTML <style> 标签
  20. 牛逼c语言代码,这段c语言代码牛逼在哪?

热门文章

  1. iOS 动画之CoreAnimation(CALayer)
  2. SpringCloud服务组合
  3. 针对天气预报集合数据的时间层次聚类和可视化
  4. Redis的多种启动方式比较!
  5. WebStorm配置SVN
  6. 游戏开发--开源21---CroftSoft Code Library |Gibdo|JOGR...
  7. 对于oracle varchar 的种种
  8. TIP/IP 端口号大全
  9. 天道酬勤,付出总有回报。
  10. 代码写的烂,经常被同事怼,教你一招!