二分排序java实现
Posted David Xu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分排序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实现的主要内容,如果未能解决你的问题,请参考以下文章