一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java經典排序算法之二分插入排序詳解

Java經典排序算法之二分插入排序詳解

2020-09-06 15:43歐陽鵬 Java教程

這篇文章主要為大家詳細介紹了Java經典排序算法之二分插入排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下

一、折半插入排序(二分插入排序)

將直接插入排序中尋找A[i]的插入位置的方法改為采用折半比較,即可得到折半插入排序算法。在處理A[i]時,A[0]……A[i-1]已經按關鍵碼值排好序。所謂折半比較,就是在插入A[i]時,取A[i-1/2]的關鍵碼值與A[i]的關鍵碼值進行比較,如果A[i]的關鍵碼值小于A[i-1/2]的關鍵碼值,則說明A[i]只能插入A[0]到A[i-1/2]之間,故可以在A[0]到A[i-1/2-1]之間繼續使用折半比較;否則只能插入A[i-1/2]到A[i-1]之間,故可以在A[i-1/2+1]到A[i-1]之間繼續使用折半比較。如此擔負,直到最后能夠確定插入的位置為止。一般在A[k]和A[r]之間采用折半,其中間結點為A[k+r/2],經過一次比較即可排除一半紀錄,把可能插入的區間減小了一半,故稱為折半。執行折半插入排序的前提是文件紀錄必須按順序存儲。

二、算法原理

折半插入排序的算法思想:

算法的基本過程:
(1)計算 0 ~ i-1 的中間點,用 i 索引處的元素與中間值進行比較,如果 i 索引處的元素大,說明要插入的這個元素應該在中間值和剛加入i索引之間,反之,就是在剛開始的位置 到中間值的位置,這樣很簡單的完成了折半;
(2)在相應的半個范圍里面找插入的位置時,不斷的用(1)步驟縮小范圍,不停的折半,范圍依次縮小為 1/2 1/4 1/8 .......快速的確定出第 i 個元素要插在什么地方;
(3)確定位置之后,將整個序列后移,并將元素插入到相應位置。

Java經典排序算法之二分插入排序詳解

三、代碼實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class BinarySort {
  public static void binarySort(int[] source) {
    int i, j;
    int high, low, mid;
    int temp;
    for (i = 1; i < source.length; i++) {
      // 查找區上界
      low = 0;
      // 查找區下界
      high = i - 1;
      //將當前待插入記錄保存在臨時變量中
      temp = source[i];
      while (low <= high) {
        // 找出中間值
        // mid = (low + high) / 2;
        mid = (low + high) >> 1;
        //如果待插入記錄比中間記錄小
        if (temp<source[mid] ) {
          // 插入點在低半區
          high = mid - 1;
        } else {
          // 插入點在高半區
          low = mid + 1;
        }
      }
       //將前面所有大于當前待插入記錄的記錄后移 
      for (j = i - 1; j >=low; j--) {
        source[j + 1] = source[j];
      }
      //將待插入記錄回填到正確位置. 
      source[low] = temp;
      System.out.print("第" + i + "趟排序:");
      printArray(source);
    }
  }
 
  private static void printArray(int[] source) {
    for (int i = 0; i < source.length; i++) {
      System.out.print("\t" + source[i]);
    }
    System.out.println();
  }
 
  public static void main(String[] args) {
    int source[] = new int[] { 12, 15, 9, 14, 4, 18, 23, 6 };
    System.out.print("初始關鍵字:");
    printArray(source);
    System.out.println("");
 
    binarySort(source);
 
    System.out.print("\n\n排序后結果:");
    printArray(source);
  }
}

四、運行結果

?
1
2
3
4
5
6
7
8
9
10
11
12
初始關鍵字: 12 15 9  14 4  18 23 6
 
1趟排序: 12 15 9  14 4  18 23 6
2趟排序: 9  12 15 14 4  18 23 6
3趟排序: 9  12 14 15 4  18 23 6
4趟排序: 4  9  12 14 15 18 23 6
5趟排序: 4  9  12 14 15 18 23 6
6趟排序: 4  9  12 14 15 18 23 6
7趟排序: 4  6  9  12 14 15 18 23
 
 
排序后結果: 4  6  9  12 14 15 18 23

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/ouyang_peng/article/details/46621633

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久久搜索 | 情乱奶水欲 | 男男按摩1069gⅴ | 小货SAO边洗澡边CAO你动漫 | 亚洲欧美色综合图小说 | 高清视频大片免费观看 | www.99精品视频在线播放 | 国产大片免费在线观看 | 欧美日韩免费一区二区在线观看 | 亚洲精品中文字幕第一区 | 成人永久免费 | 午夜福到在线4国产 | 欧美日韩视频在线第一区二区三区 | 青青青在线观看国产精品 | 久久精品麻豆国产天美传媒果冻 | 久热这里只有精品99国产6 | 国产精品免费aⅴ片在线观看 | 国产精品一区二区三区免费 | 男人的天堂日本 | 亚洲免费在线视频 | 亚洲精品午夜视频 | 无限时间看片在线观看 | 久久九九有精品国产23百花影院 | 亚洲男人天 | 免费jizz在在线播放国产 | 日韩三及片 | 成人影音先锋 | 国产特级毛片aaaaaa | 极限淫生小说 | nxgx欧美 | 果冻传媒在线播放1 | 黑人群性xxx| 欧美一区高清 | 2020国产精品亚洲综合网 | 亚洲免费视频在线观看 | 日老逼 | 久久视频这有精品63在线国产 | 韩国禁片在线观看久 | 日本色淫 | 亚洲AV 中文字幕 国产 欧美 | 成人丁香乱小说 |