【黑马学习小结】冒泡排序的示例程序编写思路

介绍

本篇是我跟随黑马课程学习的关于冒泡排序的思路总结和相关手敲代码

冒泡排序是什么

冒泡排序是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。直至数列中的最(大/小) 值被搁到数列的最末(/顶)端 

代码演示

虽说冒泡排序被称作是最简单的排序算法之一,但写代码一旦涉及到多层循环的嵌套,i j k ... 组合到一起还是让人一头雾水。因此对于目前我这样代码功底不深的学习者来讲,最稳妥清爽的方法是 先将冒泡排序过程中的一次 大泡上浮、小泡下沉从而得到最大泡的这一过程用一个for循环写出来,然后再用另一个外层for嵌套这个过程来写出每次循环得到数列中 最大泡、次大泡、次次大泡...的过程

我们事先定义一个int数组用于排序,

int[] arr = {3, 1, 7, 2, 5};
在数列中一次比较两个元素的代码如下: 

通过从0索引开始的数组元素与后一个元素进行比较(两两比较),
  使数组中的最大值排在数组的最大索引处,即打擂台

注意:数组中有n个元素,则循环比较过程n-1遍就可得到数组中的最大结果;
  如果循环n遍,则会在arr[i+1]处出现超出数组索引边界的bug异常

for (int i = 0; i < arr.length - 1; i++) {
//如果前一个元素比后面的那个元素大,就将其调换位置
    if (arr[i] > arr[i + 1]){
    int temp = arr[i];
    arr[i] = arr[i + 1];
    arr[i + 1] = temp;
    }
}

遍历一下,

for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] +  " ");
}

得到被重新排序了一次的arr数组(idea运行结果如下)

1 3 2 5 7 

可以看到,数列中最大的元素“7”经过了第1波两两比较后被排在了最后 (即数列中的最大值)

第1次的比较排序写出来了,第2次、第3次...也就可以依此类推了

由于第1波两两交换已经筛选出了数组中的最大值并将其对应数组最大索引,所以第2波、第3波...的两两交换次数是逐渐减1的,也就是

for (int i = 0; i < arr.length - i - 1; i++){...}    中的 “-i-1”对应排序第1波时(i=0)为  -1; 对应第2波时(i=1)为  -2 ...

由此可以将上述代码稍加整理,套上外层循环管理趟(波)数【这一过程类似于冠军已经在第一波脱颖而出,接下来继续在较弱的选手之间选拔亚军、季军...】,一个冒泡排序的示例程序就写好了

for (int i = 0; i < arr.length - 1; i++) {

    for (int j = 0; j < arr.length - 1 - i; j++) {
        //如果前一个元素比后面的那个元素大,就将其调换位置
        if (arr[j] > arr[j + 1]){
        int temp = arr[j];
        arr[j] = arr[j + 1];
        }
    }

}

再次遍历打印一下该数组,

1 2 3 5 7 

排序完成

你可能感兴趣的:(java,排序算法)