/*
折半插入排序
/
折半插入排序是对直接插入排序的改进,对于直接插入排序而言,每次将第i个元素插入到前面的序列中,它总是从最后一个元素开始逐个比较,直到找到它的位置,这样并没有利用前面那个序列有序的特点,因此催生出了折半插入排序
import java.util.Arrays;
public class BinaryInsertSort {
public static void main(String[] args) {
int[] data = new int[] {9, -16, 29, 23, -30, -49, 21, 30, 13};
System.out.println(Arrays.toString(data));
binaryInsertSort(data);
System.out.println(Arrays.toString(data));
}
public static void binaryInsertSort(int[] data) {
for(int i=1;i<data.length;i++) {
int temp = data[i];
int low = 0;
int high = i-1;
while(low<=high) {
int mid = (low+high)/2;
if(temp>data[mid]) {
low = mid+1;
}else {
high = mid-1;
}
}
for(int j=i;j>low;j--) {
data[j] = data[j-1];
}
data[low] = temp;
System.out.println("第"+i+"次排序后的数组是:"+Arrays.toString(data));
}
}
}