一.定义
冒泡排序就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。
考试时主要考对数组及for语句的理解及运用。
二.分析:推断算法过程
int[] nums = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; 0 1 2 3 4 5 6 7 8 9
第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次 i = 0 j = nums.Length - 1 - 0 => j = nums.Length - 1 - i
第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次 i = 1 j = nums.Length - 1 - 1 => j = nums.Length - 1 - i
第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次 i = 2 j = nums.Length - 1 - 2 => j = nums.Length - 1 - i
第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6次 i = 3 j = nums.Length - 1 - 3 => j = nums.Length - 1 - i
第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5次 i = 4 j = nums.Length - 1 - 4 => j = nums.Length - 1 - i
第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4次 ……
第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3次
第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2次
第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1次
三.实例
1.对数组进行升序排列(此写法只用于平时练习或面试时才会用,主要考验基本功。)
int[] nums = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; for (int i = 0; i < nums.Length - 1; i++) { for (int j = 0; j < nums.Length - 1 - i; j++) { if (nums[j] > nums[j + 1]) //若要降序排列,此句if条件中">"号更改为"<"号即可。 { int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } // 遍历数组元素打印 for (int i = 0; i < nums.Length; i++) { Console.WriteLine(nums[i]); }
输出结果:
2.对数组进行升序排列(此写法用于做项目实战中,要学会灵活运用。)
int[] nums = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; Array.Sort(nums); //此句只能做升序排列,不能做降序排列。若要做降序排列,可先做升序排列,再写 Array.Reverse(nums); 反转排列,间接达到降序排列的目的。 //遍历数组元素打印 for (int i = 0; i < nums.Length; i++) { Console.WriteLine(nums[i]); }
输出结果:
3.对数组进行反转排列(此写法只能反转排列,并不一定按照大小排列。)
int[] nums = { 1, 4, 3, 6, 9, 8, 11 }; Array.Reverse(nums); //只能对数组元素进行反转排列。若要做降序排列,可先做升序排列,再写此句反转排列,间接达到降序排列的目的。 //遍历数组元素打印 for (int i = 0; i < nums.Length; i++) { Console.WriteLine(nums[i]); }
输出结果: