java的一段排序代码_Java常见排序算法——快速排序
概念:
通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分小,則可分別對這兩部分記錄繼續進行排序,直到整個序列有序。
原理:
在數據集之中,選擇一個元素作為”基準”(pivot)。
所有小于”基準”的元素,都移到”基準”的左邊;所有大于”基準”的元素,都移到”基準”的右邊。這個操作稱為分區 (partition) 操作,分區操作結束后,基準元素所處的位置就是最終排序后它的位置。
對”基準”左邊和右邊的兩個子集,不斷重復第一步和第二步,直到所有子集只剩下一個元素為止。
圖解:
例如我們有個一個數組[29 4 10 11 7]
1.首先我們先選定一個基準元素,這里我們選擇10作為基準元素,然后把基準元素放在最后一個,如果選擇最后一個元素作為基準元素,那么可以省略
快速排序
29 4 11 7 10
2.從左到右(除了最后的元素),循環移動小于基準元素到數據開頭,留下大于等于基準元素的接在后面。
循環i = 1的時候,找到一個小于基準元素的元素4
這個時候storeIndex = 1
快速排序
4 29 11 7 10
之后循環到i=3時7小于10和storeIndex = 1換位置
4 7 11 29 10
這個時候storeIndex = 2
3.再然后,我們把基準元素放到storeIndex的位置,其他元素位置依次+1得到了我們想要的數組
4 7 10 11 29
代碼:
public static void qSort(int[] arr, int head, int tail) {
if (head >= tail || arr == null || arr.length <= 1) {
return;
}
int i = head, j = tail, pivot = arr[(head + tail) / 2];
while (i <= j) {
while (arr[i] < pivot) {
++i;
}
while (arr[j] > pivot) {
--j;
}
if (i < j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
++i;
--j;
} else if (i == j) {
++i;
}
}
qSort(arr, head, j);
qSort(arr, i, tail);
}
算法系列:
完整代碼:
Java和Kotlin代碼我均放在了GitHub上,歡迎Star!
據說,年輕、顏值高的互聯網人都點了贊!
總結
以上是生活随笔為你收集整理的java的一段排序代码_Java常见排序算法——快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 米尔电子Zynq UltraScale
- 下一篇: java函数ao活动对象_Java程序设