標籤:font 組元 -- 思想 mic soft stat 排序 比較
【基本思想】
快速排序在元素較多的情況下,排序效率是相當高的。其基本思想是這樣:
假設數組為int[] arr = { 49, 38, 65, 97, 76, 13, 27, 22, 26, 41, 13, 17, 32 },數組元素個數為13個。
選定a[0]為left標記,a[12]為right標記,基準點pivot的初始位置一般也為a[0](其值記為p)。
定義i,j分別代表了不斷變化的left和right標記。
此時,先讓基準點歸位。即以p為基準,左側元素均小於p,右側元素均大於p。
具體即為:
1.左標記不斷右移,比較p與所在位置元素的大小,若比p大,停止比較,記下此點;
2.右標記不斷左移,比較p與所在位置元素的大小,若比p小,停止比較,記下此點;
3.交換左右標記;
4.直至左右標記重合,這個位置就是基準點的位置。
然後被基準點分開的這兩小段序列重複上述步驟。
【代碼實現】
public static void quickSort(int[] arr, int left, int right) { // 如果left不小於right,需要排序的部分只有一個元素,方法結束調用。 if (left >= right) { return; } // 將最左側的元素設定為pivot(基準點) int p = arr[left]; // 把比p小的放到左邊,比p大的放到右邊。 int i = left, j = right; while (i < j) { // j向左移,找到一個比p小的元素。 while (arr[j] >= p && i < j) { j--; } // i向右移,找到一個比p大的元素。 while (arr[i] <= p && i < j) { i++; } // i和j交換。 if (i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 讓基準點歸位,此時i與j是相同的,用誰都行。 arr[left] = arr[i]; arr[i] = p; // 基準點左側序列的元素遞迴進行快速排序。 quickSort(arr, left, i - 1); // 基準點右側序列的元素遞迴進行快速排序。 quickSort(arr, i + 1, right); }
Java中常見的排序方式-快速排序(升序)