设置哨兵与不设置哨兵的排序算法比较
用哨兵与不用哨兵的优缺点
·
设置哨兵可以避免越界访问,但排序后数组中的第一个数就是最后一个数;不设置哨兵可以直接得到传入数组的排序结果。
具体例子如下:
先看带哨兵的
#include<stdio.h>
void directsort(int a[],int n){
int i,j;
for(i=2;i<n;i++){
a[0]=a[i];
for(j=i-1;a[j]>a[0];j--){
a[j+1]=a[j];
}
a[j+1]=a[0];
}
}
int main(){
int a[10]={0,1,2,4,3,5,6,7,8,9};
directsort(a,10);
for(int i=0;i<10;i++){
printf("%d",a[i]);
}
return 0;
}
注意这里的循环条件
for(j=i-1;a[j]>a[0];j--)
可以看出当a[j]=a[0]时,跳出循环,所以既可以防止越界又可以达到与待插入数之前的数比较的目的,一箭双雕,代码简单明了。
再来看看运行结果:
第一个数是数组中的最后一个数。
再来看看不用哨兵的情况:
采用临时变量t存储 待查值
代码较为麻烦,
运行结果如下:
可以看出,整个数组都参与排序了。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)