快速排序算法

来源:互联网 发布:js修改标签属性值 编辑:程序博客网 时间:2024/06/11 01:53

快速排序采用的思想是分治思想。

快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

 

#include <iostream>#define LEN 20using namespace std;void inline swap(int &a,int &b){if(a==b){return ;}a=a^b ;b=a^b ;a=a^b ;}int Partition(int a[],int left,int right){int pivot=right ;//默认最右边值为基准值int i=left ;int j=left ;for(j=left;j<right;j++){if(a[j]<a[pivot])   //如果符号改为大于, 即实现了从大到小排列{swap(a[j],a[i++]) ;//理解这一步是关键 i为基准点,即i左边 (0——i-1)都为小于基准点的数字}}}swap(a[i],a[pivot]) ;    //将本次分割的基准值放入a[i]处return i ;}void QuikSort(int n[],int left,int right){int tmp ;if(left<right){tmp=Partition(n,left,right) ;QuikSort(n,left,tmp-1) ;QuikSort(n,tmp+1,right) ; }}int main(int argc,char **argv){int n[]={ 12, 24, 12, 4, 9, 11, 34, 53,5,4,3,7,1,10,9,8,5,6,5,4};for(int m=0;m<LEN;m++)//排序前cout<<n[m]<<"," ;cout<<endl;QuikSort(n,0,19) ;for(int m=0;m<LEN;m++)//排序后cout<<n[m]<<"," ;cout<<endl;return 0 ;}


 

原创粉丝点击