可执行的快排 quicksort

来源:互联网 发布:易视直播网络电视 编辑:程序博客网 时间:2024/05/16 02:15

很早之前就看过快排quicksort,昨天真正想去写,看能不能写出,结果哭,折腾了很久硬是没写成功,一咬牙,果断看书上的例子,结果坑爹了,理论讲的非常high,代码以执行,啥都没有,上网找了一些,运气差到极点,全是错的,估计都没有验证。

为了节省大家的时间,不要像我一样为了它,折腾个半天,搞得很是恼火,共享一下。


void swap(int &a,int &b){int temp = a;a= b;b = temp;}

partition 函数:

int partition(int a[],int left,int right)/*eg:int a[10] = {1,2,3,4,10,6,7,8,9,0};quicksort(a,0,9);  */{int i=left;int j = right+1;//-----1int temp = a[left];while(true){//第一个数 跳过 while(a[++i]<temp && i<right) ; //因为 -----处已经加了1 所以不会少算while(a[--j]>temp) ;if(i>=j)break;swap(a[i],a[j]);}//最后交换 可用swapa[left] = a[j];a[j] = temp;//无论最后一次的比较是i==j  还是i <j  //a[j] 都是小于temp 的且a[i] >temp return j;}

 递归 快排下去

void quicksort(int a[],int left,int right){if(left <right) //当只有一个数 即 left==right 时 不用排{int mid = partition(a,left,right);quicksort(a,left,mid-1);quicksort(a,mid+1,right);}}
主函数测试
int main(){//int a[9] = {1,2,3,4,10,6,7,8,9};int a[20] = {1,2,3,4,10,6,7,8,9,21,25,15,13,42,12,11,32,33,7};quicksort(a,0,sizeof(a)/sizeof(a[0])-1);for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){cout <<a[i] << " ";}cout <<endl;return 0;}

奇数个个数数据测试:


偶数个个数数据

第二个数据测试:



已经测试  边界安全,大家放心使用