在实际中最常用的一种排序算法,速度快,效率高。
快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
1 void quicksort(int left,int right) 2 { 3 int i,j,t,temp; 4 if(left>right) 5 return; 6 7 temp=a[left]; //temp中存的就是基准数 8 i=left; 9 j=right; 10 while(i!=j) 11 { 12 //顺序很重要,要先从右边开始找 13 while(a[j]>=temp && i<j) 14 j--; 15 //再找右边的 16 while(a[i]<=temp && i<j) 17 i++; 18 //交换两个数在数组中的位置 19 if(i<j) 20 { 21 t=a[i]; 22 a[i]=a[j]; 23 a[j]=t; 24 } 25 } 26 //最终将基准数归位 27 a[left]=a[i]; 28 a[i]=temp; 29 30 quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程 31 quicksort(i+1,right);//继续处理右边的 ,这里是一个递归的过程 32 }