关于冒泡排序,其中一些代码不懂,请帮帮忙,详细的解释一下。在此跪下盖头三下。顺便问一下,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();
        }
    }
}

解决方案 »

  1.   

    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;//还有这个 
          } 
       } 
     } 
      

  2.   

    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++)
      

  3.   

     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(); 
            } 
        } 
    }