快速排序
来源:互联网 发布:朋友圈发广告软件 编辑:程序博客网 时间:2024/06/05 20:04
快速排序
原理
和之前学习到的归并排序一样,快速排序也使用了分治的思想。假设现有一个数组a[start,end],对这个数组进行快速排序分了下面三个步骤:
- 分解:在数组a[start,end]中确定一个标准(一般是找a[end]),以这个标准调整元素并找出一个位置p,使得start<=i<=p-1区域内的所有元素都小于等于a[end],而p+1<=i<=end这个区域中所有元素都大于等于a[end]。下面是图解:
- 解决:通过递归调用快速排序,对分出来的子数组a[start,p-1]和a[p+1,end]进行排序。
- 合并:因为子数组都是原址排序的,因此不需要合并的操作。
C语言实现
int partition(int* a, int start, int end){ int x = a[end]; int i = start; //调整整个数组中元素的位置并找出中间值的索引 for (int j = start; j < end; j++) { if (a[j] <= x) { int t = a[i]; a[i] = a[j]; a[j] = t; i++; } } //将中间值放在找出的中间值索引处 int t = a[i]; a[i] = a[end]; a[end] = t; return i;}void quick_sort(int* a, int from, int to){ if (from < to) { int p = partition(a, from, to); quick_sort(a, from, p - 1); quick_sort(a, p + 1, to); }}void main(){ int count, *p; printf("请输入需要排序的数的个数 :"); scanf_s("%d", &count); p = (int*)malloc(count * 2); printf("\n请输入需要排序的%d个数字:",count); for (int i = 0; i < count; i++) { scanf_s("%d", p+i); } printf("\n快速排序后的数组:"); quick_sort(p, 0, count - 1); for (int i = 0; i < count; i++) { printf("%d ", p[i]); } printf("\n"); system("pause");}
算法分析
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- python多线程并行实现随机森林
- WEB_基础_interceptor工作原理_待
- sql语句中count(*)与count(1)以及count(字段名)的异同点
- BZOJ 3168 Heoi2013 钙铁锌硒维生素 矩阵求逆+匈牙利算法
- viewpager切换动画问题
- 快速排序
- OpenWrt配置nfs服务器
- 第十六周项目2-有些数的阶乘不算了
- exception的捕获和使用(02)
- Ajax
- 深入理解RunLoop
- opencv源码分析:icvCreateCARTStageClassifier之二(转载)
- opencv特征点算法surf和最近邻算法flann
- 【转】ios字符串编码转换(utf-8 & gbk)问题