java的一段排序代码_Java常见排序算法——快速排序
概念:
通過一趟排序?qū)⒋判蛴涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分小,則可分別對(duì)這兩部分記錄繼續(xù)進(jìn)行排序,直到整個(gè)序列有序。
原理:
在數(shù)據(jù)集之中,選擇一個(gè)元素作為”基準(zhǔn)”(pivot)。
所有小于”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的左邊;所有大于”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的右邊。這個(gè)操作稱為分區(qū) (partition) 操作,分區(qū)操作結(jié)束后,基準(zhǔn)元素所處的位置就是最終排序后它的位置。
對(duì)”基準(zhǔn)”左邊和右邊的兩個(gè)子集,不斷重復(fù)第一步和第二步,直到所有子集只剩下一個(gè)元素為止。
圖解:
例如我們有個(gè)一個(gè)數(shù)組[29 4 10 11 7]
1.首先我們先選定一個(gè)基準(zhǔn)元素,這里我們選擇10作為基準(zhǔn)元素,然后把基準(zhǔn)元素放在最后一個(gè),如果選擇最后一個(gè)元素作為基準(zhǔn)元素,那么可以省略
快速排序
29 4 11 7 10
2.從左到右(除了最后的元素),循環(huán)移動(dòng)小于基準(zhǔn)元素到數(shù)據(jù)開頭,留下大于等于基準(zhǔn)元素的接在后面。
循環(huán)i = 1的時(shí)候,找到一個(gè)小于基準(zhǔn)元素的元素4
這個(gè)時(shí)候storeIndex = 1
快速排序
4 29 11 7 10
之后循環(huán)到i=3時(shí)7小于10和storeIndex = 1換位置
4 7 11 29 10
這個(gè)時(shí)候storeIndex = 2
3.再然后,我們把基準(zhǔn)元素放到storeIndex的位置,其他元素位置依次+1得到了我們想要的數(shù)組
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!
據(jù)說,年輕、顏值高的互聯(lián)網(wǎng)人都點(diǎn)了贊!
總結(jié)
以上是生活随笔為你收集整理的java的一段排序代码_Java常见排序算法——快速排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 米尔电子Zynq UltraScale
- 下一篇: Android 第一篇