关于冒泡排序,其中一些代码不懂,请帮帮忙,详细的解释一下。在此跪下盖头三下。顺便问一下,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();
}
}
}
{
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();
}
}
}
解决方案 »
- SerialPort类的问题
- 父窗口调用子窗口内的数据
- C#中如何查找最后一个非空的元素的下标?
- 菜鸟问题:如何在C#下面写log文件信息
- rdlc报表,第一次点打印按钮,打印队列一闪而过,点击第二次才能打印?
- 最小化窗体时触发的是哪个事件?
- 窗体最小化后“还原”的代码怎么写?
- 如何将DataGrid控件数据列的宽度设置成刚好完整显示字段中最长的数据内容
- 如何接收sql语句执行(select count(*)....)的返回值
- 高分:如何获得一个数据集其中一个表的字段,及其内容?不胜感激!
- 如何才能让Bmp对象中的图片放在PictureBox中的具体坐标区域中?
- 用datatable提示无法找到表 0。
{
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;//还有这个
}
}
}
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++)
{
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();
}
}
}