以下是代码部分
#include <stdio.h>
#define dmax 6 //待排序的数字的个数
int main (void)
{
int i, j, k, w, sum[dmax];
for (i=0; i<dmax; ++i)
{
printf("shu ru di %d ge shu: ",i+1);
scanf("%d",&sum[i]);
}
for (i=0; i<dmax-1; ++i)
{
j = i;
for (k=i+1; k<dmax; ++k)
{
if (sum[i] < sum[k])
j = k;
if (i != j)
{
w = sum[i];
sum[i] = sum[k];
sum[k] = w;
}
}
}
printf("\ncong da dao xiao pai xu:\n");
for (i=0; i<dmax; ++i)
{
printf("%d ",sum[i]);
}
return 0;
}
编译环境是VC6.0 结果未排序 请高手赐教
----------------解决方案--------------------------------------------------------
没人帮我吗
----------------解决方案--------------------------------------------------------
j = k;
if (i != j)
这2句为什么要?看不懂.
----------------解决方案--------------------------------------------------------
他的本意是想降低程序的时间复杂度 减少外循环的循环次数 可是程序是有问题的
----------------解决方案--------------------------------------------------------
++i?
----------------解决方案--------------------------------------------------------
没找到原因!!期待中,哥们不过这程序写得有点说不出的原因
----------------解决方案--------------------------------------------------------
{
......
j=i;//在j=k的时候,j被改变了,不需要让他还原吗? 加人这一句就OK了
}
----------------解决方案--------------------------------------------------------
凡是++i的地方都要改成i++
我先说说他的思想吧、
我粗看了一下他的程序,好象他的思想是:先是输入6个数然后依次赋值,第2步循环依次取前面的数和相邻后边数比较,把大的值赋给后面的,小的值给前面的,循环结束以后,输出
他的很多语句不是很“纯”原谅我的用词,给我的感觉就是这样
我觉的排序有很多经典的算法,楼主可以看看学习学习,
----------------解决方案--------------------------------------------------------
差不多就是“冒泡排序法” 不过 程序中有些地方给变形了,楼主好好看看书吧
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#define dmax 4
int main ()
{
int i, j, k, w, sum[dmax];
for (i=0; i<dmax; ++i)
{
printf("shu ru di %d ge shu:",i+1);
scanf("%d",&sum[i]);
}
for (i=0; i<dmax; ++i)
{
j = i;
for (k=0; k<i; ++k)
{
if (sum[k] < sum[j])
j = k;
if (j != i)
{
w = sum[j];
sum[j] = sum[i];
sum[i] = w;
}
}
}
printf("\n");
for (i=0; i<dmax; ++i)
{
printf("%d ",sum[i]);
}
return 0;
}
----------------解决方案--------------------------------------------------------