快速排序(Quicksort)是對冒泡排序的一種改進。由C.
A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
c語言實現如下:
#include <stdio.h> //列印數組 void display(int array[],int size){ printf("the array is:"); int i; for(i=0;i<size;i++){ printf("%d ",array[i]); } printf("\n"); } //分割函數 int cut(int array[],int left,int right){ //將數組的第一個數作為基準值 int baseNum = array[left]; while(left < right){ //從數組的右側開始,找到一個比基準值小的數 while(left < right && array[right] >= baseNum){ right--; } //將該數賦給left array[left] = array[right]; //從數組的左側開始,找到一個比基準值大的數 while(left < right && array[left] <= baseNum){ left++; } //將該數賦給right array[right] = array[left]; } //最後將基準值賦給left或者right,此時left=rightarray[left] = baseNum;//返回left或者right return left;}//快速排序組函數,left和right分別為要進行排序的數組的左右邊界void quick(int array[],int left,int right){ if(left < right){//分割函數,返回基準值在array中的下標 int cutPoint = cut(array,left,right);//對基準值左邊的數組進行快速排序 quick(array,left,cutPoint-1);//對基準值右邊的數組進行快速排序 quick(array,cutPoint+1,right); }}int main(void){int array[10]={34,45,1,39,21,68,65,100,4,51}; display(array,10);//快速排序 quick(array,0,9); display(array,10);return 0;}