标签:
。。。前几天老妈又批我了,啊哈算法还没看完。。。
于是不甘落后的我开始努力看书。。。虽然我看了很多了。。。
从头开始!!!
1.自定义函数快速排序
如果一提起排序,你还想得是一下2行东西,那你就out了
#include<algorithm>
sort(a,a+n);
这个效率虽然很高,但人外有人,天外有天,肯定有比这个更快的,那就是---快速排序
看着这个过程很像二分。。。
我们先给一列数:6 1 2 7 9 3 4 5 10 8
进行排序。
我们先将6作为基准数,将比6小的数“扔”到它的左边,比6大的数“扔”到它的右边。
就成这样了。。。
3 1 2 5 4 6 9 7 10 8
然后递归,每次将第1个数作为基准数,一次排序。
下面是代码实现(有注释哦)
#include<iostream> using namespace std; int a[100000]; void Qsort(int left ,int right) { if(left>right)return ; int temp=a[left];//注意啦!这个很重要!temp中存的就是基准数 int i=left,j=right; 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]);//如果i,j没有遇上,交换 } //注意:不要忘掉把基准数归位 a[left]=a[i]; a[i]=temp; Qsort(left,i-1);//处理左边的元素,递归 Qsort(i+1,right);//处理右边的元素,递归 return ; } int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&a[i]); Qsort(0,n-1); for(int i=0;i<n;i++)printf("%d ",a[i]); return 0; }
还会有后面的讲解哦,欢迎关注
标签:
原文地址:http://www.cnblogs.com/ysmor/p/5722815.html