我是菜鸟我怕谁——关于冒泡排序的问题,希望高手帮帮。

awnujtg 2009-05-05 06:48:30
关于冒泡排序,其中一些代码不懂,请帮帮忙,详细的解释一下。在此跪下盖头三下。顺便问一下,C#没有像JAVA那样有什么方法之类的排序吗?

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] s = new int[5];//声明数组
int i, j;//循环变量
int map;//临时变量
Console.WriteLine("请输入5个学生的成绩:");
for (i = 0; i < s.Length; i++)//循环读入数据
{
Console.WriteLine("请输入第{0}学生的成绩:", i + 1);
s[i] = int.Parse(Console.ReadLine());

}
for (i = 0; i < s.Length-1; i++)///这个数组长度减1,为什么要减1呢
{
for (j = 0; j <s.Length-1-i; j++)///这个我都更不明白了,减1再减i
{
if (s[j] > s[j + 1])///这个s[j]第一次循环是数组的第0位元素不可能大于S [j+1] 这个元素吧,S [j+1]指的是数组第1位元素吧
{
map = s[j];//还有这个
s[j] = s[j + 1];//还有这个
s[j + 1] = map;//还有这个
}
}
}
Console.WriteLine("排序后的成绩为:");
for (i = 0; i < s.Length; i++)
{
Console.Write("{0}\t", s[i]);
}
Console.ReadLine();
}
}
}
...全文
60 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sushou2009 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jimgreat 的回复:]
C#自带的排序

C# codeint[] s = new int[5];
Array.Sort(s);



map = s[j];//还有这个
s[j] = s[j + 1];//还有这个
s[j + 1] = map;//还有这个

这三行是把 s[j]和s[j+1]互换一下 应该知道吧!!

冒泡排序每次会把一个大的元素排到数组的末尾,最后一个最小元素自然在前面,
所以for (i = 0; i < s.Length-1; i++)外面的循环进行s.Length-1次就行了

还是因为每次已经把大的元素排到后面去了,再比较…
[/Quote]
很详细~~
momoyssy 2009-05-05
  • 打赏
  • 举报
回复
for (i = 0; i < s.Length-1; i++)///这个数组长度减1,为什么要减1呢 从0开始算起啊,所以长度减1的值就等于长度的值
{
for (j = 0; j <s.Length-1-i; j++)///这个我都更不明白了,减1再减i 这里就是精粹,冒泡一个来和第一个比较,如此循环
{
if (s[j] > s[j + 1])///这个s[j]第一次循环是数组的第0位元素不可能大于S [j+1] 这个元素吧,S [j+1]指的是数组第1位元素吧 LS理解错了,s[j]是第0位元素的位置,不是第0个元素,所以s[j+1]这个位置的元素不一不定期就比s[j]位置上的元素大
{
map = s[j];//还有这个 把s[j]的元素赋给map变量s[j]就为空,执行下一步
s[j] = s[j + 1];//还有这个 把s[j+1]的元素赋给s[j]位置,执行下一步
s[j + 1] = map;//还有这个 把map的元素赋给s[j]位置
} 三步实现了s[j]和s[j+1]交换元素,完成一次排序
}
}
Console.WriteLine("排序后的成绩为:");
for (i = 0; i < s.Length; i++)
{
Console.Write("{0}\t", s[i]); 循环输出!
}
Console.ReadLine();
}
}
}
jimgreat 2009-05-05
  • 打赏
  • 举报
回复
C#自带的排序
int[] s = new int[5]; 
Array.Sort(s);


map = s[j];//还有这个
s[j] = s[j + 1];//还有这个
s[j + 1] = map;//还有这个

这三行是把 s[j]和s[j+1]互换一下 应该知道吧!!

冒泡排序每次会把一个大的元素排到数组的末尾,最后一个最小元素自然在前面,
所以for (i = 0; i < s.Length-1; i++)外面的循环进行s.Length-1次就行了

还是因为每次已经把大的元素排到后面去了,再比较就是后面的元素就不用比较了
所以for (j = 0; j <s.Length-1-i; j++)
Learn-anything 2009-05-05
  • 打赏
  • 举报
回复
for (i = 0; i < s.Length-1; i++)///这个数组长度减1,为什么要减1呢 0到n-1 与n的关系,自己想想
{
for (j = 0; j <s.Length-1-i; j++)///这个我都更不明白了,减1再减i 没有搞明白冒泡的思想,这是第二层循环
{
if (s[j] > s[j + 1])///这个s[j]第一次循环是数组的第0位元素不可能大于S [j+1] 这个元素吧,S [j+1]指的是数组第1位元素吧
{ 下面这三句这是把元素换个位置,相邻的两个元素,如果前面的大就把它跟后面一个元素交换位置
map = s[j];//还有这个
s[j] = s[j + 1];//还有这个
s[j + 1] = map;//还有这个
}
}
}

111,126

社区成员

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

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

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