1. 程式人生 > >快速排序的遞迴實現

快速排序的遞迴實現

/*把陣列arr按照一個支點分成左右兩個部分
左邊比支點小,右邊比支點大,再返回支點pivot*/
int partition(int *arr,int low, int high){
    int pivot = arr[low];   //low為陣列的第一個元素的位置,high為陣列的最後一個元素的位置
    while(low < high){
        while(low < high && arr[high]>=pivot){
        //從最後開始查詢比pivot小的元素
            --high;
        }
        arr[low] = arr[high];
        while
(low < high && arr[low]<=pivot){ //從最後開始查詢比pivot小的元素 ++low; } arr[high]=arr[low]; } arr[low] = pivot;//把儲存在支點的值給low return low;//返回low的值也即把兩邊分成兩組的位置 } /*遞迴排序*/ void quicksort(int arr, int low, int high){ if(low < high){ int
pivot = partition(arr,low,high); quicksort(arr,low,pivot-1); quicksort(arr,pivot+1,high); } }