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条)

报告相同问题?

悬赏问题

  • ¥15 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题