3.插入排序
1)直插
void InsertSort(){
int i,j;
for(i=1;i<n;i++) //将后面元素依次向前比较插入
if(a[i].key>a[i-1].key){
a[0]=a[i];
for(j=i-1;a[0].key>a[j].key;j--)
a[j+1]=a[j]; //后移元素
a[j+1]=a[0]; //插入最终位置
}
}
时间复杂度O(n^2),空间复杂的O(1)
简单直接,算法稳定
2)折半插入
void InsertSort(ElemType a[],int n){
int i,j,low,high,mid;
for(i=2;i<=n;i++){
a[0]=a[i]; //a[i]暂存到a[0]
low=1;high=i-1;
while(low<=high){
mid=(low+high)/2;
if(a[mid].key>a[0].key) high=mid-1; //查找左半字表
else low=mid+1;
}
for(j=i-1;j>=high+1;j--)
a[j+1]=a[j]; //统一后移
a[high+1]=a[0];
}
}
时间复杂度O(n^2),空间复杂度O(1)
减少了比较次数为O(nlogn),算法稳定
排序(二)
最新推荐文章于 2022-11-01 15:49:26 发布