快速排序原理及代码模板
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.整数二分算法原理 ps:数组具有单调性,则一定可以使用整数二分算法:但是,能够使用整数二分算法的数组,数组未必具有单调性. 整数二分算法的本质:给定一个区间,在区间中定义了某种性质.该性质在区间的 ...
- 【数据结构】对快速排序原理的理解(图解,通俗易懂)
学习数据结构时,书本上直接给出了快速排序的过程以及代码,对其原理解释的不够详细,琢磨代码后,发现其原理其实十分简单,简述如下: (1)在待排序列中找一个"中枢元素"(书本上默认取序 ...
- 快速排序原理及Java实现
https://blog.csdn.net/jianyuerensheng/article/details/51258374 1.基本思想: 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排 ...
- 快速排序原理以及java实现
原理:选择一个关键值作为基准值.比基准值小的都在左边序列(无序的),比基准值大的都在右边(无序的).一般选择序列的第一个元素. 一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位 ...
- 【排序算法】快速排序原理及Java实现
1.基本思想: 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的.快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较 ...
- python 快速排序 详解_数据结构与算法:快速排序(原理讲解+python实现)
快速排序 快速排序是一种基于分治法(Divide and Conquer)的排序算法 它之所以称为快速排序是因为它的平均时间复杂度为O(nlogn),最坏情况下是O(n2) 但是这样的情况不常见 一般 ...
- 一图解析JavaScript快速排序原理,看了就不会忘~~
时隔一年(当时是2020.05.02),再看当初写的快排,只能说能排序,但是性能比较差: 1,选取比较元素的时候,没必要浪费两次数学计算去取中间值!也就是这个是没必要的: const middleIn ...
- 归并排序原理及代码模板
1.归并排序[基于分治思想] 算法主要步骤: a.确定区间的分界点即区间[l, r]的中间位置:mid = l + r >> 1,分成左.右两边: b.递归排序左边.右边: c.将左.右两 ...
最新文章
- Comet OJ - Contest #2题解
- 被七牛云OSS对象存储测试域名回收后正确数据迁移姿势!
- RV1108之MiniGui显示参数配置
- 高中物理公式、规律汇编表
- 超详综述 | 基于深度学习的命名实体识别
- 图像处理理论(一)——直方图、二值化、滤波基础
- 十、Linux文件系统基本操作(mount挂载,umount卸载)
- 共享可写节包含重定位_今年双11好房也打折!贝壳兰州站“11.11新房节” 5日开启...
- Docker操作补充
- python interactive slider_python3----练习题(过滑块验证)
- Echarts数据grid直角坐标系(xAxis、yAxis)详解
- centos 截图命令 screenshot
- 解码斯坦福开源狗DogGo--附硬件清单、源码、图纸、论文
- linux系统下Gaussian16和Gaussian view6的详细安装步骤
- 西奥电梯服务器无响应,干货│西奥电梯故障分析和技术文件
- 致敬科比,实现查询科比每赛季数据的Web服务器
- docker重启参数--restart=always的作用
- c语言最长良序字符串,C语言高效编程的4个方法
- HTML <style> 标签
- 牛逼c语言代码,这段c语言代码牛逼在哪?