快速排序quicksort
来源:互联网 发布:h软件管理 编辑:程序博客网 时间:2024/05/14 01:27
快速排序解读(递增排序)
1.分治法(Divide-and-ConquerMethod)
function quickSort(arr,left,right){ var pivot; if(<span style="font-family: Arial, Helvetica, sans-serif;">left</span><span style="font-family: Arial, Helvetica, sans-serif;"><right) {//递归出口:arr只有一个元素</span> pivot = partition(arr,left,right); quickSort(arr,left,pivot-1); //对左区间递归排序 quickSort(arr,pivot+1,right); //对右区间递归排序 } }
2.partition
目的:找一个pivot(这里找数组最左端的),将这个pivot放在合适的位置,
pivot的左边元素都小于它,右边的元素都大于它
eg: [6,2,4,1,9,10,3,5] //6是pivot
[5,2,4,1,3,6,9,10] //partition之后
要点:1.找一个pivot(这里找数组最左端的)
2.设置一个索引i,这个索引记录的是小于pivot的元素个数,初始值为l
function partition(arr ,left ,right){ var i=left ,j; function swap(i,j){ var temp = arr[i]; arr[i]=arr[j]; arr[j]=temp; } for(j=left+1;j<=right;j++){ if(arr[j]<=pivot ){ i++; //i记录了小于pivot的元素个数 if(arr[i]!=arr[j] ){ swap(i,j); } } } swap(left,i); }
解说:pivot=6, left = 0,right=7,j的初始值为1,i的初始值为0
当 j=3时,i也等于3
[6 , 2 , 4 , 1 , 9, 10 , 3 , 5 ]
i,j
当 j=5时,因为arr[4],arr[5]都大于pivot,所以i不递增,i=3
[6 , 2 , 4 , 1 , 9, 10 , 3 , 5 ]
i j
当 j=6时,arr[6]<pivot,所以i++
[6 , 2 , 4 , 1 ,9, 10 ,3, 5 ]
i j
并且arr[i]和arr[j]交换位置
[6 , 2 , 4 , 1 , 3, 10 , 9 , 5 ]
当 j =7时 arr[7]<pivot,所以i++
[6 , 2 , 4 , 1 , 3, 10 ,9 ,5 ]
i j
并且arr[i]和arr[j]交换位置
[6 , 2 , 4 , 1 , 3, 5 ,9 , 10 ]
i
最后swap(left,i)
[5 , 2 , 4 , 1 , 3, 6 ,9 , 10 ]
- 快速排序(quicksort)
- QuickSort(快速排序)
- 快速排序(quicksort)
- 快速排序QuickSort
- 快速排序(QuickSort)
- QuickSort(快速排序)
- 快速排序(quickSort)
- 快速排序(Quicksort)
- 快速排序 QuickSort
- 快速排序QuickSort.c
- Quicksort 快速排序源程序
- QuickSort 快速排序
- quicksort快速排序
- quicksort快速排序
- (C#)快速排序 Quicksort
- 快速排序算法QuickSort
- 快速排序(QuickSort)
- 快速排序(QuickSort)
- Linux下debian系统安装配置OpenCV并检测程序
- 数据结构和算法
- JSON认识
- Libev源码分析10:libev中poll的用例
- Java形参个数可变的方法
- 快速排序quicksort
- MATLAB实用源代码
- 开发Appcelerator时需要参考的API文档
- 欢迎使用CSDN-markdown编辑器
- unityscript(js)学习 transform,
- ASP.NET MVC应用中浏览器无法发出Ajax请求的问题解决一例
- C# 程序员最常犯的 10 个错误
- TCP调优
- oraoledbpus10.dll: 找不到指定的模块