关于冒泡排序的补充
开始今天的复习!
昨天晚上想了一个问题:冒泡排序方法是不是可以带返回值类型呢?
考试的时候是那样写了,但是没有写好,回头翻了笔记,发现是可以的。
敲个代码来加深下印象:
/** * @Date: 2019-11-24 08:40 * @King: No blood!No bone!No ash!!! */ public class TestBubbleSortIII { public static void main(String[] args) { /** * 定义一个数组 */ int [] array = {12,21,16,5,36,22,2,9,66}; /** * 先输出排序前的样子,练习下for循环遍历数组 */ System.out.println("排序前:"); for (int i = 0;i < array.length;i++) { System.out.print(array[i] + " "); } System.out.println(); /** * 调用排序方法 */ bubbleSort(array); /** * 练习下for-each循环遍历数组 */ System.out.println("排序后:"); for (int i : array) { System.out.print(i + " "); } } /** * 带返回值类型的冒泡排序 */ public static int [] bubbleSort (int [] array) { /** * 外层for循环--排序趟数 */ for (int i = 0;i < array.length;i++) { /** * 定义一个标识,判断排序过程是否发生元素交换位置,默认false代表没有交换 * (一开始自己觉得默认false代表数组无序,到后面判断时思维会混乱) */ boolean flag = false; /** * 内层循环比较相邻元素的大小,前者大于后者则交换位置 * 每比较一趟,i + 1,j - 1,j与i的关系可以用j <array.length - 1 - i表示 */ for (int j = 0;j <array.length - 1 - i;j++) { if (array[j] > array[j + 1]) { int temp = array[j + 1]; array[j + 1] = array[j]; array[j] = temp; flag = true; } } /** * 一趟循环下来数组中未发生元素交换位置--数组已经有序,结束循环 */ if (!flag) { break; } } return array; } }
输出结果:
排序前:
12 21 16 5 36 22 2 9 66
排序后:
2 5 9 12 16 21 22 36 66
总结:思维要活,也要经得住验证。
Develop good habits and use them to cover up bad habits.