这两个函数有什么不同??

lunarfan 2008-07-31 10:30:00
void sort(int *x, int n)
{
int i, j, k, temp;

for (i = 0; i < n - 1; i++)
{
k = i;
for (j = i + 1; j < n; j++)
if (x[j] > x[k])
{
k = j;
temp = x[i];
x[i] = x[k];
x[k] = temp;
printf("%d, %d\n", i, k);
}
}
}


void sort(int *x, int n)
{
int i, j, temp;

for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if (x[j] > x[i])
{
temp = x[i];
x[i] = x[j];
x[j] = temp;
printf("%d, %d\n", i, j);
}
}

从功能上看我没看出什么不同。例如输入这几个数:698 352 369 542 356从排序的结果上却大相径庭。
...全文
80 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
craster 2008-07-31
  • 打赏
  • 举报
回复
第一排序的时候K没有保持是最大值的位置,每次徇环都在变,所以排序后的结果不是正确的!
第二个是正确的选择排序,因为每次选择都是i位置比较(当前最大值),选择出每次比较的最大值.
dream_and_life_szy 2008-07-31
  • 打赏
  • 举报
回复
第一种是排序算法么?如果是,是哪种啊?谢谢!
chtitaxie 2008-07-31
  • 打赏
  • 举报
回复
从格式上看,要完成从大到小的排序:
第一个函数不能正确排序,
第二个函数才可以正确排序...
macfan 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 smallputin 的回复:]
一个叫选择法,一个叫冒泡法,效率不一样
[/Quote]
两个算法根本就不一样,第一个里面当不满足if时K等于I,当满足IF时K等于J
第二个就是一个选择排序.
smallputin 2008-07-31
  • 打赏
  • 举报
回复
一个叫选择法,一个叫冒泡法,效率不一样
dbger 2008-07-31
  • 打赏
  • 举报
回复
一中k在第二个循环中随着j变化
二中i在第二个循环中保持不变
dbger 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dbger 的回复:]
VS2005测试输出结果一样。
[/Quote]

不好意思,代码测试错误
Maxwell 2008-07-31
  • 打赏
  • 举报
回复
第一个算法里k有时是j有时是i,第二个里面i j不会改变,所以是两个不同的算法。
dbger 2008-07-31
  • 打赏
  • 举报
回复
VS2005测试输出结果一样。
james_li85 2008-07-31
  • 打赏
  • 举报
回复
两个只有在比较第一次成功的时候相等
接下去进行第二次比较的话,第一题比较的是x[j]>x[k] //k=上一次的j,不是i
而第二题还是比较x[j]>x[i]
james_li85 2008-07-31
  • 打赏
  • 举报
回复
两个只有在第一次的时候相等
如果有两次的,第一个比较x[j]>x[k] //k=上一次的j,不是i
而第二个还是比较x[j]>x[i]
dbger 2008-07-31
  • 打赏
  • 举报
回复
没看出来,结果不一样?

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧