冒泡排序

冒泡排序,顾名思义,就是像气泡一样往上冒。

升序排序为例,从第一个数字开始,往向他后面的一个数字比较,如果前者大后者小,就交换,否则,不动,指针后移。依次类推

先来第一趟排序

用于示例的原始数据是:[5, 6, 1, 3, 4]

for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] > arr[i + 1]){
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i+1] = temp;
            }
        }
        System.out.println("第一趟排序后的结果:");
        System.out.println(Arrays.toString(arr));

 

for (int j = 0; j < arr.length - 2; j++) {
            if(arr[j] > arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        System.out.println("第二趟排序的结果是");
        System.out.println(Arrays.toString(arr));

 

 

依次类推,每次都能确定一个数,因为是升序,所以每次都能确定一个最大的数排到他该去的位置上,相对的,需要排序的元素个数也会减少

寻找规律可以得到冒泡排序的总方法:

public static int [] Bubblesort(int [] array){
        int item;
        for (int i = 1; i < array.length; i++) {
            for (int j = 0; j < array.length - i; j++) {
                if (array[j] > array[j+1]) {
                    item = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = item;
                }
            }
        }
    return array;
}

优化:

那如果直接就给了一个有序的数组呢,咋办,还要一遍一遍的去比的话不是就浪费时间了吗?

因此,提出冒泡排序的优化算法,其实很简单

定义一个flag初始值设为false,放到算法的交换部分里面去,如果进行了交换,就把值设置为true,说明进行过了比较,那就看flag就行了,如果从前往后比较,一个数都没有交换,那么OK,就是有序的数组了已经,直接返回就行了。

posted @ 2020-07-18 14:03  _未知的暖意  阅读(153)  评论(0编辑  收藏  举报