快速排序
快速排序的核心在与找到驱轴后,根据驱轴大小对数组重新排序,如果是从小到大排序:将小的放在驱轴左边,大的放在驱轴右边,这样完成一轮了。然后第二轮同样的,把驱轴左边数组和右边数组的也进行这样的操作,直到数组只剩下一个值了,那就不用排序了。该选取过程是一个递归过程,每次选取的驱轴其实就是该数排序的位置。经过几轮递归找到所有驱轴放到相应位置,便完成了排序。
#include"iostream" using namespace std; const int n = 10; void swap(int &a,int &b){ int t = a; a = b; b = t; } void show(int *a,int n){ for(int i = 0;i < n;i++){ cout<<a[i]<<ends; } cout<<endl; } /*****************************/ //选取第一个点作为驱轴 void Qsort(int *a,int l,int r){ int p = a[l]; int i = l,j = r + 1; if(l >= r){ return ; } while(i < j){ //i == j 就退出循环 while(i < j && a[++i] < p); //取左边第一个大与驱轴的值 while(i < j && a[--j] > p); //取右边第一个小与驱轴的值 if(i < j){ swap(a[i],a[j]); //交换大值与小值 } } swap(a[i - 1],a[l]); //恢复驱轴 Qsort(a,l,i - 1); Qsort(a,i,r); } void quicksort(int *a,int n){ Qsort(a,0,n - 1); } /*******************************/ int main(){ int a[n] = {6 ,1 , 2, 7, 9, 3, 4, 5, 10, 8}; //int a[n] = {1,2,3,4,5,6,7,8,9,10}; //int a[n] = {10,9,8,7,6,5,4,3,2,1}; //int a[n] = {1,3,5,7,9,2,4,6,8,10}; show(a,n); quicksort(a,n); show(a,n); return 0; }
BY oleolema