二分插入排序
基本原理:對於直接插入排序的一種改進,通過不斷地折半來快速確定第i個元素的插入位置。即計算0~i-1的中間點,用i索引處的元素與中間值進行比較,如果i索引處的元素大,說明要插入的這個元素應該在中間值右側,反之在左側(從小到大)
時間效率:
空間效率:
算法穩定性:不穩定
//二分插入排序(從小到大排序)
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);
}
}