#include <stdio.h>
#define dmax 7
int main ()
{
int i, k, sum[dmax], w, j, z = 0;
for (i=0; i<dmax; ++i)
{
printf("shu ru di %d ge shu:",i+1);
scanf("%d",&sum[i]);
}
for (i=dmax-1; i>0; --i)
{
for (k=j=0; k<i; ++k)
{
if (sum[k] < sum[k+1])
{
w = sum[k];
sum[k] = sum[k+1];
sum[k+1] = w;
j = k;
z++;
}
}
}
printf("\n");
for (i=0; i<dmax; ++i)
{
printf("%d ",sum[i]);
}
printf("\n%d",z);
return 0;
}
原代码我就不发了,以上算法是冒泡法的改进
----------------解决方案--------------------------------------------------------
冒泡法是一种效率较差的选择方法
程序实现的时候,代码的长度比较长
程序运行的时候 计算机的工作时间长
cpu的消耗大
不提倡
对于数据型的操作还可以将就
但是对于文件 数组(2、3维等) 指针等 就不容易实现了
就是一种很糟糕的算法了!
----------------解决方案--------------------------------------------------------
起泡法?
----------------解决方案--------------------------------------------------------
我们正在学 但我觉得没有其他的快
----------------解决方案--------------------------------------------------------
2楼说的对啊
----------------解决方案--------------------------------------------------------
有点点没明白
for (i=dmax-1; i>0; --i)
{
for (k=j=0; k<i; ++k)
{
if (sum[k] < sum[k+1])
{
w = sum[k];
sum[k] = sum[k+1];
sum[k+1] = w;
j = k; //请教,这句话是什么意思啊?没看懂
z++;
}
}
}
----------------解决方案--------------------------------------------------------
j = k; ?这个有什么用啊?
----------------解决方案--------------------------------------------------------
j = k 本来我想通过j来控制外循环次数呢 循环体内有一个语句是判断如果数据已经有序则退出外循环
这样又可以减少时间复杂度
----------------解决方案--------------------------------------------------------
牛!!
----------------解决方案--------------------------------------------------------