折半插入排序
- 实现思想
- 直接插入排序算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找
- 时间复杂度
- 最好情况:O(n)
- 最坏情况:O(n²)
- 平均时间复杂度:O(n²)
- 空间复杂度
- 稳定性
代码
#include<stdio.h>
void BInsertSort(int r[],int n){
int i,j,mid,high,low;
for(i=2;i<=n;i++){
r[0]=r[i];
low=1;
high=i-1;
while(low<=high){
mid=(low+high)/2;
if(r[0]<r[mid])
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=low;j--)
r[j+1]=r[j];
r[low]=r[0];
}
}
void Output(int r[],int n){
int i;
for(i=1;i<=n;i++){
printf("%d ",r[i]);
}
printf("\n");
}
void main(){
int n=8;
int r[9]={0,3,1,7,5,2,4,9,6};
printf("未排序的集合为:\n");
Output(r,n);
BInsertSort(r,n);
printf("从小到大排序后的集合为:\n");
Output(r,n);
}