zoukankan      html  css  js  c++  java
  • 排序算法总结第二弹冒泡排序javascript描述

    上篇博文总结了选择排序,这篇来看冒泡排序,接上篇。

    冒泡排序思想:若是正再将一组数据升序排序,

    第一趟:比较相邻的数据,当左侧值大于右侧值将他们进行交换,将较小值向前浮动,大值向后冒泡,直至比较到最后一个元素,则最大的数必然冒泡到最后一个元素。

    第二趟:用同样的方法比较前面的n-1个纪录,以此进行比较和交换,第2大的数就会冒到倒数第2个元素。

    ........

    以此类推,直到i=n-1最后一趟比较完为止。

    js代码如下:

    function bubbleSort(arr) {
            for (var i = 0; i < arr.length; i++) {
                for (var j = 0; j < arr.length - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            return arr;
        }

    但是上边算法有点小问题,复杂度有点高,试想如果关键字序列为31,12,42,55,68,90,那么第一趟排序结果为12,31,42,55,68,90,显然,序列已经升序有序,就可以直接结束整个排序,而不是继续排序。因此改进算法如下:设置flag标志,用来标志是否进行交换排序,从而跟踪序列是否已经有序

    代码算法如下:

    function bubbleSort1(arr) {
            var flag = true;
            for (var i = 0; i < arr.length && flag; i++) {
                flag = false;
                for (var j = 0; j < arr.length - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        flag = true;
                    }
                }
            }
            return arr;
        }

    冒泡排序是最慢的排序算法之一。

    时间复杂度分析:最好情况下已经有序,故外层循环只需要进行1次就结束整个排序过程,最小时间复杂度为O(n)。最差的情况外层最多进行n-1次,内层循环进行n-i次,所以时间复杂度为O(n*n)。

    稳定性:冒泡排序是一中稳定的排序算法。

    空间复杂度:需要一个辅助空间进行交换,故为O(1).

  • 相关阅读:
    。404,500等状态码集锦
    【转】JSP总结
    【转】浮躁的人永远不是一个高手
    。JavaSE------初识Java
    。山重水复疑无路
    [游戏开发-学习笔记]菜鸟慢慢飞(九)- NGUI- UIPanel(官方说明翻译)
    [游戏开发-学习笔记]菜鸟慢慢飞(八)- 插入排序
    [游戏开发-学习笔记]菜鸟慢慢飞(七)- 迷宫更新
    [游戏开发-学习笔记]菜鸟慢慢飞(六)- 冒泡排序
    [游戏开发-学习笔记]菜鸟慢慢飞(五)-你怎么做笔记?
  • 原文地址:https://www.cnblogs.com/hxc555/p/5905392.html
Copyright © 2011-2022 走看看