美文网首页
冒泡排序法

冒泡排序法

作者: Gavin黄炯鹏 | 来源:发表于2019-04-11 10:56 被阅读0次
  • 算法思路
    • 对于大小为n的数组a,用i遍历元素(遍历范围[0, n-2]),每次拿a[i]和a[i+1]比较,假如a[i]>a[i+1],两者交换。
    • 最多重复上述操作n-1次。
  • 算法疑问
    • 为什么不是重复n次?
      因为当完成第m次冒泡时(m>=0 && m<=n),a[n-1-m, n-1]是有序的。即执行完第n-1次操作后,a[0, n-1]已经有序,因此不用执行第n次冒泡。
    • 最多是什么意思?
      考虑一种极端情况,当数组本身已经是有序的,执行完第一次冒泡操作,并没有元素发生交换。意思是说,假如冒泡排序没有发生元素的交换,数组就是有序的。判断数组是否有元素交换,可以提前中止冒泡操作。
  • 算法分析
    • 是否是稳定排序算法
      是的。
    • 是否是原地排序算法?
      是的。
    • 空间复杂度
      因为时候原地排序算法,所以是O(1)。
    • 时间复杂度
      • 最优时间复杂度
        假设数组本身有序,执行一次就行了,复杂度是O(n)。
      • 最差时间复杂度
        需要执行n-1次冒泡操作就是最坏的情况。
        设m是冒泡次序,则有
        t(m) = n - m, t为每次冒泡的时间消耗
        T(n) = t(1) + t(2) + ... + t(m)
            = n - 1 + n - 2 + ... + n - m
            = n*m - (1+m)*m/2
        当m = 1时,T(n) = n - 1,即O(n)
        当m = n - 1时,T(n) = n(n-1)/2, 即O(n2)
        
  • 算法实现
    public void sort() {
        // data是要排序的数组
        if (data == null) {
            setDataRandomly(); // 设置随机数组
        }
        for (int i = 0; i < getSize()-1; i++) {
            for (int j = 0; j < getSize() - 1 - i; j++) {
                if (data[j] > data[j+1]) {
                    int temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                }
            }
        }
    }
    

相关文章

  • 冒泡排序法C

    xcode冒泡排序法 下载冒泡排序。

  • 各种排序方法

    冒泡排序法 选择排序法 链表排序法 qsort()函数排序法

  • 算法-冒泡排序

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

  • 经典排序算法总结

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

  • PHP四种基础算法详解

    需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中 的值按照从小到的顺序进行排序。 1、冒泡...

  • 排序算法篇_快速排序法

      快速排序(Quick Sort)法和冒泡排序法类似,都是基于交换排序思想的。快速排序对冒泡排序法进行了改进,从...

  • iOS常见算法

    升序算法:用冒泡排序法 选择排序法 快速排序

  • 3种排序

    冒泡排序 插入排序 快速排序法

  • 第2天

    题目:对10个数进行排序 分析:可以采用冒泡排序法,也可以使用选择排序法 程序1:冒泡排序法 #include i...

  • js 常见排序算法(快速排序,选择排序等)

    快速排序法 选择排序 插入排序 冒泡排序

网友评论

      本文标题:冒泡排序法

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