• 常用排序算法-冒泡排序


    介绍

      冒泡排序算法是一种简单的排序算法,它在重复的访问要排序的元素时,会依次比较相邻的两个元素,以升序为例,如果左边的元素大于右边的元素,就交换两个元素的位置,如此重复,直到没有相邻的元素需要交换位置,则排序完毕。

      在排序的过程中,每一轮交换都会将最大的元素移动到数组的末端(升序),如同气泡上浮一般,所以称之为冒泡排序。

    原理

      下表是对[4,5,6,3,2,1]进行冒泡排序,每次都将当前数据和下一个数据进行比较,以升序为例,如果当前数据比下一个数据大,则交换两个数据的位置,否则不做任何处理。通过第一趟排序将最大值6放置在最后一个位置,第二趟将5放置在倒数第二个位置,依次类推,直到所有的数据都排序完成。

    初始 4 5 6 3 2 1
    第1趟 4 5 3 2 1 6
    第2趟 4 3 2 1 5 6
    第3趟 3 2 1 4 5 6
    第4趟 2 1 3 4 5 6
    第5趟 1 2 3 4 5 6

    程序

    public class BubbleSort {
        public static void bubbleSort(int [] arr){
            for(int i = 0; i < arr.length - 1; ++i){
                for(int j = 0; j < arr.length - i - 1; ++j){
                    if(arr[j] > arr[j + 1])
                        swap(arr, j, j + 1);
                }
            }
        }
        private static void swap(int[] arr, int i, int j){
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    总结

      冒泡排序的时间复杂度最差为O(n^2),最好情况时O(n),平均时间复杂度为O(n^2)。

      同时冒泡排序是在原数组上直接进行操作,空间复杂度是O(1)。

      由于元素的排序是相邻两元素交换得到的,所以冒泡排序是稳定的。

      小优化:对于如[1,2,3,4,5,6]这种已经排序好了的数组,我们可以设置一个标志位,用来判断本轮排序是否对元素进行了交换,如果没有交换,表示此时剩下的元素已经排好序了,直接返回即可,这也就是冒泡排序最好的情况。

  • 相关阅读:
    番号推荐系统bugtag
    jar包替换里面的jar
    window快速搭建禅道环境zenpanel
    linux支持7z解压缩
    fiddler抓浏览器请求,发送请求无法抓取请求且异常
    golang开发工具goland下载
    jemalloc+lua+nginx自动化构建
    东北老年人相亲实录
    find对xml文件搜索
    selenium记录操作过程日志
  • 原文地址:https://www.cnblogs.com/silentteller/p/12748554.html
Copyright © 2020-2023  润新知