标签:
今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。
方法其实很简单:
假设我们对“6,1,2,7,9,3,4,5,10,8”这10个数进行排序
首先在这个序列里随便找一个基准数,为了方便就让第一个数“6”作为基准数。
然后分别从序列两端开始寻找,先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换它们。
6 1 2 7 9 3 4 5 10 8 转换为 6 1 2 5 9 3 4 7 10 8
直到i==j的时候 就成了这样
6 1 2 5 4 3 9 7 10 8(绿色3就是i==j的地方)
交换6 和 3 ,然后6左边的全是小于等于6的数,右边的全是大于等于6的数 3 1 2 5 4 6 9 7 10 8
之后再把“6”右边的数快速排序,左边的也快速排序,递归进行,最后生成答案。
//核心代码 void quicksort(int left,int right) { if(left>right)return ; int i=left,j=right,temp=a[left]; while(i!=j) { while(a[j]>=temp && i<j)j--; while(a[i]<=temp && i<j)i++; if(i<j)swap(a[i],a[j]); } a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); return; }
标签:
原文地址:http://www.cnblogs.com/wzq1-blogs/p/5910625.html