特点
实际上是对直接插入法的优化,优化的是在查找插入位置时的效率。
折半插入排序:用二分查找的方法在有序部分找到待排序元素插入的位置,叫做折半插入排序
实例
代码
void BinaryInsertSort(int *arr,int length){
int i; //无序部分第一个元素
int j; //有序部分插入位置下标的前一个位置
int low;
int high;
int mid;
for(i = 2;i<=length;++i){ //初始状态arr[1]是有序的,所以i从2开始比较
arr[0] = arr[i];
low = 1;
high = i - 1;
while(low <= high){
mid = (low+high)/2;
if(arr[0] < arr[mid]){
high = mid - 1;
}else{
low = mid + 1;
}
} //循环结束,high+1则为插入位置
for(j = i-1;j>= high+1;--j){ //腾出插入位置
arr[j+1] = arr[j];
}
arr[high+1] = arr[0]; //插入元素
}
}