冒泡排序(Java实现)

根据维基百科的定义:

        冒泡排序英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法的思路如下:

    (1)比较相邻元素。如果前者比第二个大,那就交换它们的位置。

    (2)  对每对相邻元素执行相同的操作,从第一对开始到最后一对结束。完成后,最后一个元素将是最大的数字,这里就是一趟。

    (3)对除最后一个元素之外(已最大,无需比较)的所有元素重复上述步骤。每一趟都能确定一个数(相对于每一趟的

            后一个素),重复上面的步骤,直到没有可以比较的数字对。

时间复杂度:
        O(n^2)
空间复杂度:
        O(1)
Java代码实现:
public class BubbleSort {

    public static void bubbleSort(int[] arr){
        if(arr == null || arr.length < 2){//如果数组为空或者元素个数少于2
            return;
        }
        for (int end = arr.length - 1; end > 0; end--){//确定第end个之前需要排序
            for (int i = 0; i <end; i++){   //i确定i ~ end需要相互交换
                if(arr[i] > arr[i+1]){
                    swap(arr,i,i+1);
                }
            }
        }
    }
    //交换
    private static void swap(int[] arr, int a, int b) {
        arr[a] = arr[a] ^ arr[b];
        arr[b] = arr[a] ^ arr[b];
        arr[a] = arr[a] ^ arr[b];
    }
    public static void main(String[] args) {
        int[] arr = new int[]{3,6,4,2,11,10,5};
        bubbleSort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "  ");//2  3  4  5  6  10  11  
        }
    }
}
过程简图:


优缺点:

        算法实现简单容易理解,但是,对于包含大量的元素的数列排序效率很低。在最坏的情况,冒泡排序需要{\displaystyle O(n^{2})}O(n^{2})次交换,而插入排序只要最多{\displaystyle O(n)}O(n)交换。

    


猜你喜欢

转载自blog.csdn.net/Butterfly_resting/article/details/80943581