package 排序;
/*
* 思想:前面i个有序,把第i+1个插入到其中,首先要找到位置
* 比它小的数,那么找到个数后再移动,效率比直接插入,比一个移动一个效率高
*/
public class 二分插入排序 {
public static void binarySort(int a[]){
int left=0;
int right=0;
int middle=0;
int temp;
for(int i=1;i<a.length;i++){
right=i-1;
temp=a[i];
if(temp<a[i-1]){ // 前i-1个有序,从小到大排序,若哨兵大于前一个,就不要比较了
while(left<=right){
middle=(left+right)/2;
if(a[middle]>temp)
right=middle-1;
else
left=middle+1;
}
// 找到右移
if(right!=i-1){
for(int j=i-1;j>=left;j--)
a[j+1]=a[j];
}
/*
for(int k=0;k<=i-1-right;k++){
a[i]=a[i-1];
i--;
}
*/
a[right+1]=temp;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={10,9,8,7,6,5,4,3,2,1,2,10,5};
binarySort(a);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+"->");
}
}
优化的二分查找插入算法
最新推荐文章于 2023-09-11 17:27:01 发布