美文网首页
入门算法:冒泡排序

入门算法:冒泡排序

作者: 半理想主义 | 来源:发表于2020-08-31 15:52 被阅读0次

上手难度:★

算法复杂度:O(n^2)

BubbleSort.gif

排序思想:

两层循环,外层是n-1次循环,同时设定一个标记flag,内层是从0到arr.length - i次循环;
内层逻辑是把大值往后交换,第一次外层循环走完后,最大的值自然就放到最后一位了,所以内存循环是arr.length-1的写法;
每次一轮外循环都会把剩余最大的值安排好位置,如果在某次循环中,flag没有变化,说明不需要交换已经排好序了,可以结束排序。

代码实现:

public class BubbleSort {
    /**
     * 交换数组中两个元素的位置
     */
    private static void swap(int[] arr, int x, int y){
        if(x < 0 || y < 0 || x > arr.length || y > arr.length){
            return;
        }
        int temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }

    public static int[] bubbleSort(int[] arr){
        // 对 arr 进行拷贝,不改变参数内容
//        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
        for (int i = 1; i < arr.length; i++) {
            //设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已经完成。
            boolean flag = true;
            for (int j = 0; j < arr.length - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr, j, j+1);
                    flag = false;
                }
            }
            if (flag) {
                break;
            }
        }
        return arr;
    }

    public static void main(String[] args) {

        int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};

        bubbleSort(arr);

        for( int i = 0 ; i < arr.length ; i ++ ){
            System.out.print(arr[i]);
            System.out.print(' ');
        }

    }
}

优点:

逻辑简单,易上手
特点:当输入的数据是反序时,时间复杂度最高为O(n^2)

相关文章

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 算法入门——冒泡排序、选择排序

    上篇文章学习了算法入门——顺序查找、二分查找,这篇文章我们学习算法入门——冒泡排序、选择排序。 冒泡排序 冒泡排序...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 算法入门——插入排序、快速排序

    上篇文章学习了算法入门——冒泡排序、选择排序,这篇文章我们学习算法入门——插入排序。 插入排序 插入排序是在一组列...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • php之排序-------冒泡排序的优化

    本文需要在理解冒泡排序的基础之上 排序是算法入门的基础操作,冒泡排序很经典。下面这个改进后的冒泡排序,使循环的次数...

  • 冒泡排序

    冒泡排序是最基本的排序算法,是学习算法的入门英雄,就像是王者荣耀中的妲己和后羿。通过对冒泡排序的学习和代码实现,引...

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • iOS算法总结-冒泡排序

    iOS算法总结-冒泡排序 iOS算法总结-冒泡排序

  • 排序算法系列(1)——冒泡排序

    本着朴素的原则,笔者准备记录的第一个算法是入门级也是最简单、最容易实现的算法——冒泡排序 冒泡排序呢,是交换排序的...

网友评论

      本文标题:入门算法:冒泡排序

      本文链接:https://www.haomeiwen.com/subject/lmafjktx.html