java二分排序法原理_Java常见排序算法详解—— 二分插入排序
轉(zhuǎn)載請注明出處:
二分插入排序Binary Insert Sort
概念:
二分(折半)插入排序是一種在直接插入排序算法上進(jìn)行小改動的排序算法。其與直接排序算法最大的區(qū)別在于查找插入位置時(shí)使用的是二分查找的方式,在速度上有一定提升。
原理:
總共有N個(gè)元素,當(dāng)插入第i個(gè)元素時(shí),對前面的0~i-1個(gè)元素進(jìn)行折半,先跟他們中間的那個(gè)元素比,如果小,那么再對前半折半,否則對后半進(jìn)行折半,知道左
關(guān)說原理可能大家不是很理解,下面我們就用一個(gè)列子來詳細(xì)說明一下:
例如:我們當(dāng)前數(shù)組為[4 5 7 10 29 11]
已知當(dāng)前0到第N-1個(gè)都是按順序排序,現(xiàn)在對第N個(gè)11找對應(yīng)位置。
第一趟
[4 5 7 10 29] 11
L M R
11比中間M大
那么接下來第二趟為:
[4 5 7 10 29] 11
L M R
11比中間M大
那么11的位置就在M+1這個(gè)
注意,我們這里的第0到第N-1已經(jīng)是按照要求排好序的
代碼:
//從小到大
public void sort() {
for (int i = 1; i < array.length; i++) {
int temp = array[i];
int low = 0, high = i - 1;
int mid = -1;
while (low <= high) {
mid = low + (high - low) / 2;
if (array[mid] > temp) {
high = mid - 1;
} else { // 元素相同時(shí),也插入在后面的位置
low = mid + 1;
}
}
for(int j = i - 1; j >= low; j--) {
array[j + 1] = array[j];
}
array[low] = temp;
}
}
算法系列:
完整代碼:
Java和Kotlin代碼我均放在了GitHub上,歡迎Star!
據(jù)說,年輕、顏值高的互聯(lián)網(wǎng)人都點(diǎn)了贊!
打開App,閱讀手記
總結(jié)
以上是生活随笔為你收集整理的java二分排序法原理_Java常见排序算法详解—— 二分插入排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言错误c1010怎么办,fatal
- 下一篇: java美元兑换,(Java实现) 美元