1. 程式人生 > >二分排序java實現

二分排序java實現

java 特點 bsp IT span pan while 插入排序java 數組

1.什麽是二分排序:

二分排序是指利用二分法的思想對插入排序進行改進的一種插入排序算法,不同於二叉排序,可以利用數組的特點快速定位指定索引的元素;

算法思想:二分法插入排序是在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們中間的那個元素比,如果小,則對前半再進行折半,否則對後半進行折半,直到left>right,然後再把第i個元素前1位與目標位置之間的所有元素後移,再把第i個元素放在目標位置上。

2.這是普通的插入排序java實現:

 1     public static void insertSort(int[] arr){
 2         for(int i=0;i<arr.length;i++){
3 int j = i; 4 int k = j-1; 5 while(k>=0){ 6 if(arr[k]>arr[j]){ 7 int tmp = arr[k]; 8 arr[k] = arr[j]; 9 arr[j] = tmp; 10 j--; 11 k--; 12
}else{ 13 break; 14 } 15 } 16 } 17 }

3.二分排序java代碼實現如下:

 1     public static void binarySort(int[] arr){
 2         for(int i=1;i<arr.length;i++){
 3             int left= 0;
 4             int right= i-1;
 5             int
pivot = (left+right)/2; 6 while(left<right){ 7 while(left<right){ 8 if(arr[pivot]>arr[i]){ 9 right = pivot-1; 10 pivot = (left+right)/2; 11 }else{ 12 break; 13 } 14 } 15 while(left<right){ 16 if(arr[pivot]<arr[i]){ 17 left = pivot+1; 18 pivot = (left+right)/2; 19 }else{ 20 break; 21 } 22 } 23 } 24 if(left>=right){ 25 if(arr[pivot]<arr[i]){ 26 pivot++; 27 } 28 int j = i; 29 int k = j-1; 30 while(k>=pivot){ 31 int tmp = arr[j]; 32 arr[j] = arr[k]; 33 arr[k] = tmp; 34 j--; 35 k--; 36 } 37 } 38 } 39 40 }

二分排序的時間復雜度:O(n^2),空間復雜度:O(1)

二分排序java實現