插入排序:将待排序记录插入已排好的记录中,不断扩大有序序列。(稳定的排序算法)
折半插入排序:寻找插入位置时采用折半查找的方法。
时间复杂度:
O
(
n
2
)
O(n^2)
O(n2)
#include<iostream>
using namespace std;
void BinInsertSort ( int a[], int n )
{
for ( int i=1; i<n; i++ ) {
// 在 a[0..i-1]中折半查找插入位置使 a[high]≤a[i]<a[high+1..i-1]
int low = 0,high = i-1;
while ( low<=high ) {
int m = ( low+high )/2;
if ( a[i]<a[m] )
high = m-1;
else
low = m+1;
}
// 向后移动元素 a[high+1..i-1],在 a[high+1]处插入 a[i]
int x = a[i];
for ( int j=i-1; j>high; j-- )
a[j+1] = a[j];
a [high+1] = x; // 完成插入
}
}
int main(){
int len=6;
int a[]={24,85,47,53,30,91};
cout<<"original array:"<<endl;
for(int i=0;i<len;i++){
cout<<a[i]<<endl;
}
cout<<endl;
BinInsertSort(a,len);
cout<<"insert sort:"<<endl;
for(int i=0;i<len;i++){
cout<<a[i]<<endl;
}
cout<<endl;
return 0;
}