冒泡排序到底有几种写法哦.....

Ultra95599 2009-06-26 11:46:15
int temp;
for (int j = 0; j < list.Length; j++)
{
for (int i = list.Length - 1; i > j; i--)
{
if (list[j] < list[i])
{
temp = list[j];
list[j] = list[i];
list[i] = temp;
}
}
}
\----------------------------------------------------------------
for (int i = 0; i < list.Length; i++)
{
for (int j = i + 1; j < list.Length; j++)
{
if (list[i] > list[j])
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
-------------------------------------------------------------------------
这2个是冒泡排序吧,但是他们的实现方法不一样啊,还有就是第1个是大数在前小的数在后面,第2个和第1个相反
冒泡到底是大的数在前还是小的数在前,那这2个肯定其中一个是错的吧.

我仔细看了 这2个它们的实现方式真的不一样....
...全文
908 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxx221 2011-06-10
  • 打赏
  • 举报
回复
第二种难以理解啊。、
muyebo 2009-06-27
  • 打赏
  • 举报
回复
简单的解释冒泡排序:
甲乙丙丁四个人,从矮到高排序
第一步:甲跟乙比较,甲如果比乙高,甲和乙交换,然后第一位置上的人和丙比较,同样判断是否交换,接着和丁比较
结果:第一个位置上的人肯定是四个中最矮的
第二步:拿第二位置上的人和第三个第四个人比较
结果:第二个位置上的人肯定是二三四中最矮的
第三步:拿第三位置上的人和第四个人比较
结果:第三个位置上的人肯定是三四种最矮的
剩下一个不用比了
binhu12332100 2009-06-27
  • 打赏
  • 举报
回复
muyebo 2009-06-27
  • 打赏
  • 举报
回复
"但是他们的实现方法不一样啊"
打个排个子比方,你排高矮,比如有四个人1234,你先拿1和2在1和3在1和4比较,与你先拿1和4在1和3在1和2比较有区别吗
"冒泡到底是大的数在前还是小的数在前,那这2个肯定其中一个是错的吧."
看你是想把个子高的排在前面,还是想把个子矮的排在前面了
brookmill 2009-06-27
  • 打赏
  • 举报
回复
这两个是一样的,只不过循环的方向相反而已。
两个都是从小到大排序,都是在(list[i] > list[j])的情况下发生交换。
冒泡排序既可以是从小到大,也可以是从大到小。
muyebo 2009-06-27
  • 打赏
  • 举报
回复
第一个是从大到小排,第二个是从小到大排
冒泡方法是一样的,只不过第一个玩了点花头,同后面往前面算(跟一般人的想法不一样)
q863829288 2009-06-27
  • 打赏
  • 举报
回复
好像不对啊,应该是这样吧:

int temp;
for (int j = 0; j < list.Length-1; j++)
{
for (int i = list.Length-1; i > j; i--)
{
if (list[j] < list[i])
{
temp = list[j];
list[j] = list[i];
list[i] = temp;
}
}
}
//----------------------------------------------------------------
for (int i = 0; i < list.Length-1; i++)
{
for (int j = i + 1; j < list.Length; j++)
{
if (list[i] > list[j])
{
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
}
//-------------------------------------------------------------------------


其中第二种应该才是冒泡的标准写法
foxlinda123 2009-06-27
  • 打赏
  • 举报
回复
帮顶
jjyyyyyyjj 2009-06-27
  • 打赏
  • 举报
回复
明显就一种,只不过程序实现的方法不一样而以
Ultra95599 2009-06-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 muyebo 的回复:]
第一个是从大到小排,第二个是从小到大排
冒泡方法是一样的,只不过第一个玩了点花头,同后面往前面算(跟一般人的想法不一样)
[/Quote]

但是冒泡排序的最最标准的写法是那个呢?我觉得是第2个吧
jiyan1221 2009-06-27
  • 打赏
  • 举报
回复
冒泡排序的思想只有一种,就看你怎么实现它。算法的精华之处就在于它能抽象出来,然后可以被不同的人在不同的地方应用。
xxyping 2009-06-27
  • 打赏
  • 举报
回复
up
lichengguizy 2009-06-27
  • 打赏
  • 举报
回复
小技巧:教您如何更快获得可用分
mathay 2009-06-27
  • 打赏
  • 举报
回复
pjw216 2009-06-27
  • 打赏
  • 举报
回复

还有一种叫 双端冒泡;一次循环减少2个数的排序,一个最大,一个最小。

阁下能不能讲解一下?
Cherishny 2009-06-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jiyan1221 的回复:]
冒泡排序的思想只有一种,就看你怎么实现它。算法的精华之处就在于它能抽象出来,然后可以被不同的人在不同的地方应用。
[/Quote]

是的

ximi82878 2009-06-27
  • 打赏
  • 举报
回复
貌似就一种,因为是冒泡,原理都是一样的,就是一个是最大限出,一个是最小现出,当然,可能排序有更好的算法,但是冒泡是固定好了的模式,如果不是这么写,那估计就不能称之为冒泡了
朝霞红漫天 2009-06-27
  • 打赏
  • 举报
回复
还有一种叫 双端冒泡;一次循环减少2个数的排序,一个最大,一个最小。
朝霞红漫天 2009-06-27
  • 打赏
  • 举报
回复
3种

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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