排序 快速排序

2022-08-18 19:30:19 字數 1176 閱讀 1558

​ 氣泡排序是對氣泡排序的一種改進,其基本思想是:通過一趟排序將待排序資料分割成獨立的兩個部分,其中一部分比另一部分的最小資料還要小,然後在依照此方法對兩部分資料分別使用快速排序,最終形成有序序列。

對陣列[2 , 10 , 33 , 6 , 21 , 3 , 18] 從小到大排序過程如下:

1. 首先定義乙個左邊的指標 low 和乙個右邊的指標 high 記錄位置,以及乙個中間參考值 mid ,初始時設定 mid = ( mid + high ) / 2 。

2. 左指標指向的值與中間參考值比較,值小於中間值,low 後移加一;右指標指向的值與中間參考值比較,值大於中間值,low 前移減一。

3. 當左指標指向的值大於中間值,右指標指向的值小於中間值時,交換兩個位置的值,然後左指標後移加一,右指標前移減一。

4. 當左指標大於右指標時,退出比較,否則重複第二步。

第一次遞迴過程圖如下:

後續依次對左邊部分和右邊部分分別進行快速排序,實現陣列排序。

​ 參考值的取值可以自己定,這裡**實現取的參考值是中間的那乙個資料。

public static void quicksort(int arr, int left, int right) 

int low = left;//定義左指標

int high = right;//定義右指標

int pivot = arr[(left + right) / 2];//定義參考變數值

int temp = 0;

while (low < high)

while (arr[high] > pivot)

if (low >= high)

//交換值

temp = arr[low];

arr[low] = arr[high];

arr[high] = temp;

if (arr[low] == pivot)

if (arr[high] == pivot)

}if(low == high)

if (left < high)

if (right > low)

}

排序 快速排序

快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...

排序 快速排序

定義 在快速排序演算法中,使用了分治策略,將要排序的序列分成兩個子串行,然後遞迴地對子序列進行排序,直到整個序列排序完畢。步驟 1.在序列中選擇乙個關鍵元素作為軸 2.對序列進行重新排序,將比軸小的元素移到軸的前邊,比軸大的元素移動到軸的後面。在進行劃分之後,軸便在它最終的位置上 3.遞迴地對兩個子...

排序 快速排序

時間複雜度 快速排序每次將待排序陣列分為兩個部分 1 在理想狀況下,每一次都將待排序陣列劃分成等長兩個部分,則需要logn次劃分。2 在最壞情況下,即陣列已經有序或大致有序的情況下,每次劃分只能減少乙個元素,快速排序將不幸退化為氣泡排序,最壞情況為o n 2 快速排序的平均時間複雜度為o nlogn...