快速排序——C語言
快速排序是對氣泡排序的一種改進。
其基本思想是:通過一趟排序將待排記錄分割成兩部分,其中一部分記錄的關鍵字均比另一記錄的關鍵字小,則可對這兩部分記錄繼續進行排序,以達到整個序列有序。
程式碼實現:
int partition1(int data[],int low,int high) { int pivokey,t; pivokey=data[low];///用子表的第一個記錄作樞軸記錄 while(low<high)///從表的兩端交替向中間進行掃描 { while(low<high&&data[high]<=pivokey) high=high-1;///將比樞軸記錄小的記錄交換到低端 t=data[low]; data[low]=data[high]; data[high]=t; while(low<high&&data[low]>=pivokey) low=low+1;///將比樞軸記錄大的記錄交換到高階 t=data[low]; data[low]=data[high]; data[high]=t; } return low;///返回樞軸所在位置 } void QSort1(int data[],int low,int high) { int pivotloc; if(low<high)///長度大於1 { pivotloc=partition1(data,low,high); QSort1(data,low,pivotloc-1);///對低子表遞迴排序 QSort1(data,pivotloc+1,high);///對高子表遞迴排序 } }
執行結果:
快速排序最優的情況下時間複雜度為:O( nlogn )