1. 程式人生 > >排序演算法(5)- 折半插入排序(Binary Insertion Sort)

排序演算法(5)- 折半插入排序(Binary Insertion Sort)

原理

  • 插入排序演算法的優化演算法
  • 排序演算法是和已排序佇列按順序一一比較,然後交換位置,直到找出插入位置。折半插入排序演算法是先適用折半查詢找出插入位置,然後統一後移。

注意點

時間複雜度和排序完成度沒有關係,和佇列大小有關係。和插入排序比起來,因為使用了折半查詢,所以比較次數平均會少一些。

示例

    @Override
    public int[] sort(int[] data) {
        for (int i = 1, len = data.length; i < len; i++) {
            int temp = data[i]; // 要插入的元素
int low = 0; int high = i - 1; // 折半比較,直到找到low大於high時(找到比他大的值的位置low) while(low <= high) { int mid = (low+high)/2; if (data[mid] > temp) { high = mid - 1; } else { low = mid + 1
; } } // 移動 比他大的值,全部後移 for (int j = i; j > low; j--) { data[j] = data[j-1]; } // 插入 data[low] = temp; } return data; }