快速排序的遞迴實現
阿新 • • 發佈:2018-11-14
/*把陣列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);
}
}