交换排序-冒泡排序

来源:互联网 发布:php网站数据库在哪里 编辑:程序博客网 时间:2024/05/16 09:09

1、概念

冒泡排序:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

2、算法

public static void bubbleSort(int[] arr) {        int length = arr.length;        //优化        boolean flag = true;//设置标记变量        for (int i = 0; i < length && flag; i++) {            flag = false;//只要flag在下一次外循环条件检测的时候值为false,就说明已经排好序,不用继续循环            for (int j = length - 1; j > i; j--) {                if (arr[j] < arr[j - 1]) {                    int temp = arr[j - 1];                    arr[j - 1] = arr[j];                    arr[j] = temp;                    flag = true;//如果有交换,下次将继续排序                }            }            //输出结果            System.out.print((i+1) + "times: ");            for (int k = 0; k < length && flag; k++) {                System.out.print(arr[k] + "  ");            }            System.out.println();        }    }

运行结果:

source: 8  3  6  5  9  4  10  7  1  2  1times: 1  8  3  6  5  9  4  10  7  2  2times: 1  2  8  3  6  5  9  4  10  7  3times: 1  2  3  8  4  6  5  9  7  10  4times: 1  2  3  4  8  5  6  7  9  10  5times: 1  2  3  4  5  8  6  7  9  10  6times: 1  2  3  4  5  6  8  7  9  10  7times: 1  2  3  4  5  6  7  8  9  10  

设置的标志位flag用来判断是否已经全部排序完成,当排序完成后将不再进行排序比较。

冒泡排序效率比较底下,在数据规模较小时,可以采用。数据规模比较大时,最好用其它排序方法。