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