演算法5 快速排序遞迴和非遞迴實現方式 排序

2021-08-29 15:49:22 字數 823 閱讀 7765

快速排序主要思想,選取乙個基準,進行一趟排序,調整陣列使基準左邊的數都小於基準,使基準右邊的數都大於基準。然後對於基準劃分的兩個子陣列依次進行遞迴劃分調整。

1.遞迴版本

public static void quicksort(int arr, int lo, int hi)

//演算法導論版本

// lo---i----j----hi

//lo--i之間存放小於r i---j存放等於r的值 j---hi存放大於r

private static int partition(int arr, int lo, int hi)

if(q+1low)

if(qq+1非遞迴主要利用棧來儲存需要遞迴劃分的數字座標

3.partition函式的其他實現方式

選取最小數作為基準r,維護兩個指標,分別找到左邊第乙個比r小的數  右邊第乙個比r大的數,交換位置。最後調整基準位置。

//演算法第四版

private static int partition2(int arr, int lo, int hi)

swap(arr, lo, j);

return j;

}

private static int partition3(int arr, int low, int high)

arr[low] = pivot; //最後樞紐元放到low的位置

return low;

}

快速排序時間複雜度平均o(nlogn),當陣列基本有序時,時間複雜度變為o(n2);

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

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

快速排序 遞迴和非遞迴的實現

快速排序主要就是partition的操作。遞迴的實現。a 要排序的陣列,s 開始位置,e 結束位置 void quicksort int arr,int s,int e 普通劃分操作。以最後乙個元素 arr e 作為基準 intpartition int arr,int s,int e swap a...

遞迴和非遞迴快速排序 Python實現

快速排序的原理是基於分治策略,設定乙個基準線 pivot 將資料分為兩部分,不斷分治實現資料的排序 由實現原理容易得到遞迴 如下 def qsort arr ifnot len arr return else 在這裡以第乙個元素為基準線 pivot arr 0 left qsort x for x ...