冒泡排序--by winter

对下列数进行由大到小的排序:  1,2,3,4,5,6

   1 2 3 4 5 6  共有N个数,n=6

   2 3 4 5 6 1  第1趟比较  这趟两两间要比较5次

   3 4 5 6 2 1  第2趟比较  这趟两两间要比较4次

   4 5 6 3 2 1  第3趟比较  这趟两两间要比较3次

   5 6 4 3 2 1  第4趟比较  这趟两两间要比较2次

   6 5 4 3 2 1  第5趟比较  这趟两两间要比较1次

  从上面可得出结论:

   1,有N个数,一共要比较n-1趟。

   2,第j趟要比较n-j次。趟数没增加一次,这趟的次数就要少比较一次。

 所以,整理得代码如下:

 1 static void Main(string[] args)
 2         {
 3             //冒泡排序算法
 4             //要点:数组个数为N,一共要比较N-1趟,每趟比较
 5             int[] number = { 1, 2, 3, 4, 5, 6, 7, 8 };
 6             for (int i = 0; i < number.Length - 1; i++)//趟数
 7             {
 8                 for (int j = 0; j < number.Length - 1 - i;j++ )//趟数没增加一次,这趟的比较次数就要减少一次。所以上面i++了,这里直接减去i就可以了。
 9                 {
10                     if (number[j] < number[j + 1])
11                     {
12                         int temp;
13                         temp = number[j];
14                         number[j] = number[j + 1];
15                         number[j + 1] = temp;
16                     }
17                 }
18             }
19             for (int a = 0; a < number.Length; a++)
20             {
21                 Console.WriteLine(number[a]);
22             }
23             Console.ReadKey();
24         }
View Code

涉及到知识:

  1,for(i=0;i<number.lengh;i++)这里一共循环了lengh+1次。

      for(i=0;i<number.lengh-1;i++) 这里才是循环了lengh次。

    属性这个概念对写循环很有帮助。

2, 关于交换两个数:

     其口诀: 定义临时变量temp,前一个赋给temp,后一个赋给前一个,temp赋给后一个。

     熟记这个口诀对写代码的速度有很大提高。

原文地址:https://www.cnblogs.com/visibleisfalse/p/3478541.html