快速排序
来源:互联网 发布:贝克汉姆任意球数据 编辑:程序博客网 时间:2024/05/17 23:13
首先:我们要明白快速排序的原理!
1.我们一般选择数组的第一个元素来进行比较,这样可以方便我们递归调用。
2.首先设置一个Temp变量,然后从数组的最后一位向前移动,即找到一个小于Temp的数s[j],然后这个数就放入第一个位子
3.然后在从前到后寻找第一个大于等于Temp的数s[i],然后将上一步多出来的数s[i]放入s[j]的位置。
4.这样循环结束后Temp(原数组的第一个数)放入s[i]中,这样之后就表示在Temp的左边都是比Temp小的,而在右边则是大于Temp的数。
5.最后递归调用,完成整个数组的排序
1.我们一般选择数组的第一个元素来进行比较,这样可以方便我们递归调用。
2.首先设置一个Temp变量,然后从数组的最后一位向前移动,即找到一个小于Temp的数s[j],然后这个数就放入第一个位子
3.然后在从前到后寻找第一个大于等于Temp的数s[i],然后将上一步多出来的数s[i]放入s[j]的位置。
4.这样循环结束后Temp(原数组的第一个数)放入s[i]中,这样之后就表示在Temp的左边都是比Temp小的,而在右边则是大于Temp的数。
5.最后递归调用,完成整个数组的排序
void quick_sort(int s[], int l, int r){ if (l < r) { int i = l, j = r, Temp = s[l]; while (i < j) { while(i < j && s[j] >= Temp) // 从右向左找第一个小于Temp的数 j--; if(i < j) s[i++] = s[j]; while(i < j && s[i] < Temp) // 从左向右找第一个大于等于Temp的数 i++; if(i < j) s[j--] = s[i]; } s[i] = Temp; quick_sort(s, l, i - 1); // 递归调用 quick_sort(s, i + 1, r); }}
时空复杂度分析:快排每次将排序数组分为两个部分,理想状况下,每一次都 将待排序数组划分成两个部分则需要logN次划分。而在最坏情况下,即数组已经有序或是大致有序的情况下,每次划分只能减少一个元素,快速排序将不行变成了冒泡排序,所以快速排序时间复杂度下界为O(NlogN),而最坏的情况为O(n^2),在实际的应用中快排的平均时间复杂度为O(NlogN)
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- aix中大文件限制的问题
- C++学习笔记(一) 序列式容器及适配器
- linux字符终端浏览器--Lynx
- 清除windowns7的用户开机密码,加快电脑启动速度等
- android 屏幕上面画线
- 快速排序
- libcmtd.lib(crt0.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
- SysTick定时器
- Unix环境高级编程
- ORACLE正则表达式函数详解--转载整理
- 23个设计模式之单例模式
- 初识 fstab
- Linux下统计文件行数 语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有 指定文件的总统计数。字是由空格字符
- (使用STL自带的排序函数7.3.4)POJ 2371 Questions and answers(sort()函数的使用)