2 qq 27578995 qq_27578995 于 2015.06.13 23:32 提问

 为什么这不排序错了?

#include

int main(int argc, const char * argv[]) {
// insert code here...
int i,j;
int a[10];
int iTemp;
int iPos;
printf("为数组元素赋值: \n");
/*从键盘为数组元素赋值*/
for (i=0; i<10; i++) {
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
//从小到大排序
for (i=0; i<9;i++) {
iTemp=a[i];
iPos=i;
for (j=i+1; j<10; j++) {
if (a[j]<iTemp) {
iTemp=a[j];
iPos=j;
}/*交换两个元素*/
a[iPos]=a[i];
a[i]=iTemp;
}
}
//输出数组
for (i=0; i<10; i++) {
printf("%d\t",a[i]);
if (i==4) {
printf("\n");
}
}
return 0;
}

6个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.06.13 23:36
已采纳
 //从小到大排序
for (i=0; i<9;i++) {
iTemp=a[i];
iPos=i;
for (j=i+1; j<10; j++) {
if (a[j]<iTemp) {
iTemp=a[j];
iPos=j;
}/*交换两个元素*/
a[iPos]=a[i];
a[i]=iTemp;
}
}
这段代码是错的,改改,改成下面
//从小到大排序
for (i=0; i<9;i++) {
for (j=i+1; j<10; j++) {
    if (a[j]<a[i]) {
        iTemp = a[i];
        a[i]=a[j];
        a[j]=iTemp;
    }/*交换两个元素*/
}
}
qq_27578995
qq_27578995 回复danielinbiti: 没少啊,这次我换VS试试。
2 年多之前 回复
danielinbiti
danielinbiti 回复qq_27578995: 不会少敲了代码吧,细看了一下代码,原来代码加一行也是可以的a[iPos]=a[i]; a[i]=iTemp;改成a[iPos]=a[i]; a[i]=iTemp;iPos=i;
2 年多之前 回复
qq_27578995
qq_27578995 回复danielinbiti: 是正版的啊,就买的清华大学出版社的那本《C语言从入门到精通》还有本《c语言入门经典》ivory Horton写的,当初就在亚马逊看了下评论买的,现在都是K&R好,难不成我再买一本?
2 年多之前 回复
danielinbiti
danielinbiti 回复qq_27578995: 你这什么书呀。。。换正版的吧
2 年多之前 回复
qq_27578995
qq_27578995 谢谢了,书有问题了,这不知道看得下去不,才自学,那个拆半排序法一直没看懂。。好艰难
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.06.13 23:37

/*交换两个元素*/
这个不对
iTemp = a[iPos];
a[iPos]=a[i];
a[i]=iTemp;

qq_27578995
qq_27578995 我是看的书上那样写,来试一遍,那就是书错了,我对比看,书上就是我那样写的。。谢谢了
2 年多之前 回复
qq_27578995
qq_27578995   2015.06.13 23:33

include没粘贴好。。。

qq_27578995
qq_27578995   2015.06.13 23:35

图片说明

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.06.14 15:12

哈哈,下回还是买正版书吧!!好书就要买正版!!

u013947643
u013947643   2015.06.14 18:39
Csdn user default icon
上传中...
上传图片
插入图片