折半插入



public class Binary_insertion_sort {
/*

* 折半插入排序,关键字的比较次数由于采用了折半查找而减少,数量级为O (nlog 2 n) ,
* 但是元素移动次数仍为O (n2 ) 。
* 故折半插入排序时间复杂度仍为O (n2 ) 。折半插入排序方法是稳定的。
* */
public static  void print(int a[]){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
System.out.println();
}

public static void binary_insertion_sort(int[] a){
for(int j=1;j<a.length;j++){
int key=a[j];
int high=j-1;
int low=0;
while(low<=high){
int mid=(low+high)/2;
if(a[mid]<key){
low=mid+1;
}else{
high=mid-1;
}
}
for(int i=j-1;i>=low;i--){
a[i+1]=a[i];
}
a[low]=key;
}
}

public static void main(String[] args){
int[] a=new int[]{1,5,7,3,2};
print(a);
binary_insertion_sort(a);
print(a);
}
}

你可能感兴趣的:(java)