1

简介

每次都是从集合的起始位置开始,两两比较交换,大值的向后移动,直至把最大值比较交换到集合无序部分的尾部,然后从初始位置开始进行下一次比较交换,依次这样执行,直至结束。

题目

给定一组数据进行冒泡排序,以 {9, 3, 4, 2, 0, 1, 5, 8}为例。

排序过程

image.png

时间复杂度O(N²)分析

第一次排序,需要比较N-1次;
第二次排序,需要比较N-2次;
......
第N-1次排序,需要比较1次;

比较次数=(N-1)+(N-2)+...+1=((1+ N-1)*(N-1))/2=N²/2 + N/2
所以时间复杂度为:O(N²)

代码

public void bubbleSort(int[] arr) {
    if(arr == null || arr.length < 2) {
        return;
    }
    for(int i = 0, len = arr.length - 1; i < len; i++) {
        for(int j = 0; j < len - i; j++) {
            if(arr[j] > arr[j + 1]) {
                swap(arr, j, j+1);
            }
        }
    }
}
public void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}       

一只鱼
49 声望1 粉丝

« 上一篇
选择排序
下一篇 »
插入排序