二分法插入排序原理和算法代碼

二分法插入排序,簡稱二分排序,是在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們中間的那個元素比,如果小,則對前半再進行折半,否則對後半進行折半,直到left<right,然後再把第i個元素前1位與目標位置之間的所有元素後移,再把第i個元素放在目標位置上。

在這裏插入圖片描述
代碼

private static void binarySort() {
    int [] a={15,27,36,53,69,42};
    for (int i = 0; i < a.length; i++) {
        int temp = a[i]; // 待插入的元素
        int left = 0;
        int right = i - 1;
        int mid = 0;
        while (left <= right) {
            // 先獲取中間位置
            mid = (left + right) / 2;
            if (temp < a[mid]) {
                // 如果值比中間值小,就要對摺的前面部分再對摺
                right = mid - 1;
            } else {
                // 如果值比中間值大,就要對摺的右面部分再對摺
                left = mid + 1;
            }
        }

        for (int j = i - 1; j >= left; j--) {
            a[j + 1] = a[j];
        }
        if (left != i) {
            a[left] = temp;
        }
    }
}

時間複雜度:o(n^2)
由於用到了一個存儲變量temp,所以空間複雜度:o(1)

發佈了24 篇原創文章 · 獲贊 4 · 訪問量 3325
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章