zoukankan      html  css  js  c++  java
  • 排序算法-(1)冒泡排序

    以前数据结构和算法课程上学的算法都忘记的差不多了,所以还是要整理下知识点复习一下,好记性不如烂笔头。

    今天先从冒泡排序开始。

    分类和性能

    1、稳定排序和非稳定排序

    简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。

    比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的,因为a2排序前在a4的前面,排序后它还是在a4的前面。假如变成a1,a4,a2,a3,a5就不是稳定的了。

    2、内排序和外排序

    在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序;

    在排序过程中,只有部分数被调入内存,并借助内存调整数在外存中的存放顺序排序方法称为外排序。

    3、算法的时间复杂度和空间复杂度

    所谓算法的时间复杂度,是指执行算法所需要的计算工作量。

    一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。

    冒泡排序

    在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

    下面是一种改进的冒泡算法,它记录了每一遍扫描后最后下沉数的位置k,这样可以减少外层循环扫描的次数。

    最差时间复杂度为O(n^2),平均时间复杂度为O(n^2)。稳定性:稳定。辅助空间O(1)。

    算法实现

    function bubbleSort(a){
        for(let i=0;i<a.length;i++){
            for(let j=a.length-1;j>=i;j--){
                if(a[j]<a[j-1]){
                    [a[j],a[j-1]]=[a[j-1],a[j]]
                }
            }
        }
    }
  • 相关阅读:
    python2.7下同步华为云照片的爬虫程序实现
    python 下字符串格式时间比较
    C# Socket通信 小案例
    win 10 安装 mysql解压版 步骤
    Android 连接 SQL Server (jtds方式)——下
    Android 连接 SQL Server (jtds方式)——上
    Android 项目建立步骤
    ubuntu 配置android开发环境
    ubuntu 安装eclipse
    ubuntu 配置Java jdk
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/bubbleSort.html
Copyright © 2011-2022 走看看