冒泡排序

2019-05-06  本文已影响0人  topshi

冒泡排序可以说是最简单的一种排序算法,它通过不断比较相邻的两个元素,如果顺序不符就交换它们,遍历到尽头会确定一个元素的最终位置。过程就像冒泡,因而得冒泡此名。

动画演示


由动画可以看出,从头开始遍历数组,相邻元素两两比较,如果顺序不对就交换,直到尽头(黄色部分是已确定位置的元素),确定一个元素的位置,右边界向前移动一位。

算法描述

代码

 public void swap(int[] nums, int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
    public void sort(int[] nums) {
        for(int i = nums.length - 1;i >= 0;i--){
            for(int j = 0;j < i;j++){
                if(nums[j] > nums[j+1]){
                    swap(nums,j, j+1);
                }
            }
        }
    }

分析

排序算法 时间复杂度
(平均)
时间复杂度
(最坏)
时间复杂度
(最好)
空间复杂度 稳定性
冒泡排序 O(n^2) O(n^2) O(n) O(1) 稳定

相邻两个数相同时不交换位置,所以稳定。
最好时间复杂度O(n)对代码是有要求的,以下为改进代码

    public void swap(int[] nums, int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
    public void sort(int[] nums) {
        boolean didSwap = false;
        for(int i = nums.length - 1;i >= 0;i--){
            didSwap = false;
            for(int j = 0;j < i;j++){
                if(nums[j] > nums[j+1]){
                    swap(nums,j, j+1);
                    didSwap = true;
                }
            }
            if(!didSwap) return;
        }
    }

当本轮内循环没有做过元素交换,说明数组本身是有序的,则只对数组进行了一次遍历直接就返回了。

上一篇 下一篇

猜你喜欢

热点阅读