遞迴 非遞迴手寫快速排序 注釋要點

2022-03-05 08:30:25 字數 686 閱讀 3264

遞迴版本:

void quicksort(int start, int end, int arr) 

//從左開始找到大於等於base的數index

//i的這個迴圈處理arr[i]==base的情況,因為一開始會有arr[i]==base,不處理則base會產生位置變化,且有可能陣列中有其他等於base的數

while (i非遞迴版本:

...省略swap

//我們只需要對這個方法稍作改造,返回base的index,取消最前面的判斷(放到了外層sort方法)

int quicksort(int start, int end, int arr)

//從左開始找到大於等於base的數index

//i的這個迴圈處理arr[i]==base的情況,因為一開始會有arr[i]==base,不處理則base會產生位置變化,且有可能陣列中有其他等於base的數

while (i < j && arr[i] <= base)

swap(arr, i, j);

}//這時候i==j並且保證arr[i]<=base,直接swap

swap(arr, start, i);

return i;

}void sort(int arr)

if (m + 1 < r)

}}

快速排序實現(遞迴 非遞迴)

首先是劃分演算法,假設每次都以第乙個元素作為樞軸值,進行一趟劃分 int partition int a,int low,int high a low pivot 將樞軸值元素置於最終位置 return low 第乙個while迴圈裡的 還可以採用如下形式 while low high a high...

快速排序遞迴與非遞迴

快速排序思想 以公升序為例 在要排序的序列中選乙個基準,使它左邊的數都比它小,右邊的數都比它大。具體步驟 1 區間選乙個key,可以選區間右邊界的那個數 2 讓begin從區間左邊界開始往後找大於key的數,找到後停下來,再讓end從區間右邊界 1開始往前找小於key的數,找到後讓它和begin找的...

快速排序的遞迴非遞迴

快速排序 即一趟快速排序的過程,返回基準。基準 平分資料段 時間複雜度 好情況 無序的資料 o nlog2n 壞 有序 o n2 空間複雜度 o log2n 演算法穩定性 不穩定 原理 採用分治思想,在待排序的序列中選取乙個值作為乙個基準值,按照這個基準值得大小將這個序列劃分成兩個子串行,基準值會在...