日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java二分排序法原理_Java常见排序算法详解—— 二分插入排序

發(fā)布時(shí)間:2023/12/15 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java二分排序法原理_Java常见排序算法详解—— 二分插入排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。