- 论坛徽章:
- 7
|
好吧,我是初学者,邮电出版社的书都很垃圾,每本我都能发现错误
《写给大家看的C语言书》第二版
第194页的冒泡排 序法存在着逻辑上的错误。
举个最简单的例子:
如果随机产生的数组用以下数组替代
int nums[10]={1,2,4,3,6,5,8,7,10,9}
则内循环后,didswap仍然为0,然后就直接调用 break跳出外循环。
测试代码如下:
#include <stdio.h>
#include<stdlib.h>
int main()
{
int num[10]={1,2,4,3,6,5,8,7,10,9};
int ctr,inner,outer,didswap,temp;
for(outer=0;outer<9;outer++)
{
didswap=0;
for (inner=outer;inner<10;inner++)
{
if(num[inner] < num[outer])
{
temp=num[inner];
num[inner]=num[outer];
num[outer]=temp;
didswap=1;
}
}
if(didswap==0)
{
break;
}
}
for(ctr=0;ctr<10;ctr++)
{
printf("%d\n",num[ctr]);
}
return 0;
}
编译运行后,结果如下:
[itux@CentOS ~]$ ./test
1
2
4
3
6
5
8
7
10
9
看了几本邮件出版社的Linux书籍,觉得这些出版社太不专业了。 |
|