1.概要:
二分法插入排序是在直接插入排序的基础上多了一个二分法查找的过程,该过程在一定程度上缩短了比较的次数,进行了细微的优化。
二分法插入排序也是一种稳定的排序方法,其复杂度仍为O(n^2),适合排序较少元素时使用。
2.思路:
二分法插入排序是在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们中间的那个元素比,如果小,则对前半再进行折半,否则对后半进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间的所有元素后移,再把第i个元素放在目标位置上。
3.代码:
public class zeban_order {
//排序
public static void order(int[] array){
for(int i=1;i<array.length;i++){
int low=0;
int high=i-1;
int currrent=array[i];
while(low<=high){
int medium=(low+high)/2;
if(array[medium]<=currrent){
low=medium+1;
}else{
high=medium-1;
}
}
for(int j=i-1;j>=high+1;j--){
array[j+1]=array[j];
}
array[high+1]=currrent;
}
}
//输出
public static void print(int array[]){
for(int i=0;i<array.length;i++){
if(i!=array.length-1){
System.out.print(array[i]+",");
}else {
System.out.println(array[i]);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]=new int[]{24,15,36,45,5,89,42,31,62,51,99,1,102,85};
//初始顺序
zeban_order.print(a);
//排序实现
zeban_order.order(a);
//排序后顺序
zeban_order.print(a);
}
}
4.备注:
有问题的地方还请各位多多包含,不吝赐教。