Iseuwei 2016-04-03 08:48 采纳率: 100%
浏览 1994
已采纳

c语言中的冒泡排序算法

直接上代码,图:
#include
#include
#include
typedef struct{
int*pt;
int cur;
int len;
}intArr;
void bubblesort(intArr*ia){
int i,j,t,n=ia->cur;
for(i=n;i>2;i--)
for(j=1;j if(ia->pt[j]>ia->pt[j-1]){
t=ia->pt[j-1];
ia->pt[j-1]=ia->pt[j];
ia->pt[j]=t;
}
}
void printarray(intArr*ia){
int n=ia->cur;
while(n>0)
printf("%d\t",ia->pt[--n]);
printf("\n");
}
void insertarray(intArr*ia,int t){
if(ia->cur>=ia->len)
ia->pt=(int*)realloc(ia,ia->len+=10);
if(ia->pt)
ia->pt[ia->cur++]=t;
bubblesort(ia);
printarray(ia);
}
int main(){
intArr ia,iA;
int i;
ia=&iA;
ia->pt=(int
)calloc(10,sizeof(int));
ia->cur=0,ia->len=10;
printf("输入待排序数列,以空格间隔,以0结尾\n");
scanf("%d",&i);
while(i!=0)
insertarray(ia,i),
scanf("%d",&i);
system("pause");
return 0;
}
上面是完整代码,下面截图:
图片说明
图片说明
图片说明
最后一张是测试结果,可以看到在中间的某些排序中,最后两位总是错位,而且,在bubblesort()排序算法中,if()里面的>也让我很费解,按理应该降序,实际却是升序,求助大神解答

  • 写回答

7条回答 默认 最新

  • MaSones 2016-04-04 05:39
    关注

    你的程序里排序时是按照大数存到低地址,小数存到高地址,输出时是先输出高地址,后输出低地址,所以输出的数是升序。而有错位是因为输出的格式是一个“%d\t”,未给定数值的位宽。即456占三个字符,而78是两个字符。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?