java 二分插入排序演算法
阿新 • • 發佈:2019-01-14
二分插入排序實現原理:
假定從小到大排序,從第二個數開始,把當前的數用一個變數temp儲存起來作為要插入的數,然後根據二分查詢原則在要插入的數前面找到需要插入的地方,然後較大的數依次往後移,將temp放在插入的地方。然後從第三個數開始如此往返迴圈將所有的數插入進去。
時間複雜度 O(nlogn)
public class BinaryInsertSort { public static void main(String[] args) { int[] a={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1}; System.out.println("排序之前:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } //二分插入排序 sort(a); System.out.println(); System.out.println("排序之後:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } } //二分法插入 private static void sort(int[] a) { for (int i = 1; i < a.length; i++) { int temp = a[i]; int left = 0; int right = i-1; //確定要插入的位置 while(left<=right){ //先獲取中間位置 int mid = (left+right)/2; if(temp<a[mid]){ //如果值比中間值小,讓right左移到中間下標-1 right = mid-1; }else{ //如果值比中間值大,讓left右移到中間下標+1 left = mid+1; } } for (int j = i-1; j >= left; j--) { //以左下標為標準,在左位置前插入該資料,左及左後邊全部後移 a[j+1] = a[j]; } if(left != i){ //左位置插入該資料 a[left] = temp; } } } }