冒泡排序

157 阅读2分钟

闲叙

以前在学校的时候学过冒泡排序,可是工作后却再也没有用到过,遇到排序的问题,都是使用数组的一些方法来实现,久而久之就忘得差不多了,但是,这并不是说这个排序就没有存在的意义了,其实在工作中有很多地方都会用到排序,排序方法多种多样,而每种方法都牵扯到不同的算法,不同的算法又有不同的复杂度,又有算法的稳定性需要考量,总之学习并掌握一些算法的思想和实现,对自己的编程水平总是有提升的,即使眼下用不到,但时间久了你会发现一些高级的名词,一些框架中的核心概念中都会有这些算法和设计模式的身影,正因如此,算法才在面试中频频出现。

今天来写下相对来说比较简单的冒泡排序吧

冒泡排序规则: 所谓冒泡排序,即:当我们对数组进行排序时,无论是降序还是升序,都是拿相邻的两个值来做比较,如果前面一个元素比后面一个元素大(升序)或小(降序)就交换它们的位置,这样第一轮下来能够得到最大或者最小的值,第二轮能得到第二大或者第二小的值...从而实现一个有顺序的序列;

排序过程

原数组 [4,3,2,1]; 这里以升序为例:
排序次数 排序结果

  • 第一次    3,2,1,4    通过arr.length-1-i 次找出本轮最大值
  • 第二次    2,3,1,4    同上
  • 第三次    2,1,3,4   
  • 第四次    1,2,3,4   

由上可以看出: 我们一共经过四轮(数组length-1)比较完成了这次的排序任务
而每轮比较中,又比较了arr.length-1-i次确定本轮的最大值,减去i是减去上一轮已经确定好的元素的位置 代码如下:

 function bubbleSort(){
    let arr = [1,3,2,4,7];
    let temp;
    //首先明白冒泡排序的过程是怎样的找出规律
    //一共比较arr.length-1次,每次比较arr.length-1-i次
    for(let i =0;i<arr.length-1;i++){
        for(let j =0;j<arr.length-1-i;j++){
            if(arr[j]>arr[j+1]){
                //swap
                temp = arr[j];
                arr[j]=arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    console.log(arr,'arr----')
}