二分插入排序
基本原理:对于直接插入排序的一种改进,通过不断地折半来快速确定第i个元素的插入位置。即计算0~i-1的中间点,用i索引处的元素与中间值进行比较,如果i索引处的元素大,说明要插入的这个元素应该在中间值右侧,反之在左侧(从小到大)
时间效率:
O(n2)
空间效率:
O(1)
算法稳定性:不稳定
//二分插入排序(从小到大排序)
public class Sort_Binary {
private void binarySort(int nums[]){
int length = nums.length;
int minIndex =0;
for(int i = 1;i<length;i++){//从第二个元素开始
int left=0;//左指针
int right=i-1;//右指针
int temp = nums[i];//存储该次循环要插入的元素
//判断插入的位置索引
while(left<=right){
minIndex = (left+right)/2;
if(nums[minIndex]<nums[i]){
left = minIndex+1;
}else{
right = minIndex-1;
}
}
//移动插入位置索引后面的原数组元素
for(int k =i;k>left;k--){
nums[k] = nums[k-1];
}
//更新插入位置索引的元素
nums[left] = temp;
}
System.out.println(java.util.Arrays.toString(nums));
}
//测试函数
public static void main(String[] args) {
int nums[]={89,54,78,8,398,7,560,25,963,16};
Sort_Binary test = new Sort_Binary();
test.binarySort(nums);
}
}