快速排序
来源:互联网 发布:管家婆辉煌网络试用版 编辑:程序博客网 时间:2024/06/15 20:50
定义
快速排序采用递归的思想,不断将原列表拆分成两个部分,递归进行排序。排序操作为选择一个元素作为“分水岭”,将列表分成所有元素值大于该“分水岭”部分和所有元素值小于该“分水岭”部分。
示例
以整型数组{2,9,11,5,7,20,8}为例,选择第一个元素作为“分水岭”,以line表示:
原始列表:2->9->11->5->7->20->8 line=2
1次排序:2->9->11->5->7->20->8 line=9
2次排序:2->8->7->5->9->20->11 line=8
3次排序:2->5->7->8->9->20->11 line=5
4次排序:2->5->7->8->9->20->11 line=20
5次排序:2->5->7->8->9->11->20
以上为排序中间过程,递归中以列表左边部分先排序,同一颜色为拆分后的同一部分。
参考代码
class t{public static void main(String[] args){int[] arr=new int[]{2,9,11,5,7,20,8};QuickSort.sort(arr,0,arr.length-1);for(int i:arr){System.out.print(i+" ");}System.out.println();}}class QuickSort{public static void sort(int[] arr,int left,int right){if(left<right){ //递归判断条件int i=left,j=right,index=arr[i]; //index作为“分水岭”while(i<j){//列表后端保存大于index的值,前端保存小于index的值while(i<j&&arr[j]>=index){j--;}if(i<j){arr[i++]=arr[j];}while(i<j&&arr[i]<=index){i++;}if(i<j){arr[j--]=arr[i];}}arr[i]=index;//到达该步骤时,i必然等于jsort(arr,left,i-1);//递归操作列表前端sort(arr,i+1,right);//递归操作列表后端}}}
总结
快速排序将无序的列表拆分成“有序”的两个部分,使得整个列表成为包含两个“有序”部分的列表(一部分的元素值都不小于或不大于另一部分的元素值),并不断细化这些“有序”部分,最终形成有序列表。平均时间复杂度为O(n*log n),因为存在跨元素的替换,属于不稳定排序。
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- QTreeView处理大量数据
- 梯度下降法
- java8新特性(一):行为参数化
- ios10出现的问题
- Unity3D自学笔记——Photon服务器的后台架构实现(四)
- 快速排序
- FreeMarker编程导读
- 回溯算法
- 1526 分配笔名
- tomcat linux 下无使jpda远程调试
- 进程调度之HRN
- 腾讯企业邮箱发错了邮件怎么办,“邮件撤回”帮您解决问题
- php session操作总结
- 腾讯开放平台提交app审核无法上传apk文件