Java排序算法——二分插入排序

二分插入排序
基本原理:對於直接插入排序的一種改進,通過不斷地折半來快速確定第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);
    }
}
發佈了42 篇原創文章 · 獲贊 2 · 訪問量 8881
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章