折半插入 基本思想 既然每个要插入记录之前的纪录已经按关键字有序排列,在查找插入位置时就没有必要逐个关键字比较,可以使用折半查找来实现。由此进行的插入排序称之为折半插入排序。思想和直接插入相同,只是从后向前的逐个比较替换为折半查找
当算法进行到第i遍时,对于下表为i的数组元素arr[i]
找到arr[i]应该插入的位置j
将[j+1,i-1]内的数向后移以为,将arr[i]插入到arr[j+1]上
算法描述;
BinartInsertSort.cpp
#include <iostream>
using namespace std;
int main()
{
int n,mid,low,high;
int arr [1000];
cin >> n;
for(int i = 0 ; i < n; i++)
{
cin>>arr[i];
}
int j,k;
for(k = 1 ; k < n ; k++)
{
if(arr[k]<arr[k-1])
{
int cur = arr[k];
low = 0;
high = k-1;
while(low<=high)
{
mid = (low + high)/2;
if(cur>=arr[mid])
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
for(j=k-1; j>=low; j--)
{
arr[j+1] = arr[j];
}
arr[low] = cur;
}
for(int l = 0 ; l < n ; l++)
{
cout<<arr[l]<<" ";
}
cout<<endl;
}
return 0;
}
P.S. 文章不妥之处还望指正