排序演算法(5)- 折半插入排序(Binary Insertion Sort)
阿新 • • 發佈:2019-02-08
原理
- 插入排序演算法的優化演算法
- 排序演算法是和已排序佇列按順序一一比較,然後交換位置,直到找出插入位置。折半插入排序演算法是先適用折半查詢找出插入位置,然後統一後移。
注意點
時間複雜度和排序完成度沒有關係,和佇列大小有關係。和插入排序比起來,因為使用了折半查詢,所以比較次數平均會少一些。
示例
@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;
}