冒泡排序--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 }
涉及到知识:
1,for(i=0;i<number.lengh;i++)这里一共循环了lengh+1次。
for(i=0;i<number.lengh-1;i++) 这里才是循环了lengh次。
属性这个概念对写循环很有帮助。
2, 关于交换两个数:
其口诀: 定义临时变量temp,前一个赋给temp,后一个赋给前一个,temp赋给后一个。
熟记这个口诀对写代码的速度有很大提高。