package sort.com;
public class BinarySort {
/**
* 程序入口方法
* 拆半插入(二分法拆入)相当于将原来的数据序列从中间一分为二,利用中间的索引
* 改变左右序列的索引值,一直进行到找到合适的插入位置
*/
public static void main(String[] args) {
int [] a = {8,2,-3,-15,21,0,99,-124};
for(int i=1; i < a.length; i++){
//将要排序的数据元素进行存储
int temp=a[i];
//定义左,右两个索引
int leftIndex = 0;
int rightIndex = i-1;
//判断左右索引是否满足条件
while(leftIndex<=rightIndex){
//定义一个中间的索引,用来动态的修改左右索引的值
int midIndex=(leftIndex + rightIndex) / 2;
//判断将要插入的数据元素与已经排序的元素序列的中间值进行比较
if(temp > a[midIndex]){
//若要插入的新元素较大,更新左索引
leftIndex = midIndex + 1;
}
//若要插入的新元素较小,更新右索引
else{
rightIndex = midIndex - 1;
}
//输出每次的midIndex值
System.out.println("minIndex值为:"+ midIndex );
}
//用j来做已经排序后的数据序列中的最后一个数据元素的索引
for(int j = i-1; j >= leftIndex;j--){
//进行移位操作
a[j+1] = a[j];
}
//插入数据元素
a[leftIndex] = temp;
}
//遍历并输出数组
for(int v : a){
System.out.print(v+",");
}
}
}