js冒泡排序详解

2,129 阅读2分钟

所谓冒泡排序,实际是借鉴了水中的鱼。在逆战班的池塘里,有一群可爱的小鱼,他们时不时地吐出泡泡,泡泡越往上走就会越大。那我们如何在一堆大小不一的泡泡中让他们从小到大的排列呢?

排序前:

我们观察来看,如何找到最大的那个圆呢?仅仅靠肉眼看么?如果成千上万将会很麻烦。这样我们就想到之前所说的“鱼吐泡泡”,越往上走越大,最大的在最上面。借鉴了“冒泡”的思路,我们可以这样看:我们将一堆圆分为两块区域:

一块为未排序部分,

另一块为已经排好序的部分。

首先,那我们进行两两比较,前者大于后者,二者互换位置;前者小于后者,位置保持不变,进行下一组比较。都比较完了之后,完成第一轮冒泡排序。

第一轮:i=0

注:第一轮结束后,最大的已经排在了最后。而且已经处在已排序部分,那么接下来只需排序左边未排序部分的四个即可。

第二轮:i=1;

剩下的几轮依次类推。一共需要(长度-1)轮,即本例需4轮。

那我们试着用循环来实现。

在第一轮时,i=0; 第1组时:j=0:

             if(arr[j]>arr[j+1])
               {
             var temp=arr[j+1];
               arr[j+1]=arr[j];
               arr[j]=temp;
               }

第2组时:j=1: 、、、javascrip

             if(arr[j]>arr[j+1])
              {
             var temp=arr[j+1];
               arr[j+1]=arr[j];
               arr[j]=temp;
               }

........

所以for循环实现如下:

、、、javascrip

    for(var i=0;i<len;i++)
        {
            for(var j=0;j<len-i;j++)
                {
                if(arr[j]>arr[j+1])
                    {
                    var temp=arr[j+1];
                    arr[j+1]=arr[j];
                    arr[j]=temp;
                   }
              }
         }

Js中的冒泡排序代码为:

、、、javascrip

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

时间复杂度

一共需要4轮,第一轮比较4次,第二轮3次,第三轮2次,第四轮1次,一共4+3+2+1=10次; 我们类比n个,

即(n-1)轮,(n-1)+(n-2)+....+2+1

去掉低阶项,去掉常数项,所以时间复杂度为:O(n^2)

例子:1,7,9,3,4,8,2

结果: 1,2,3,4,7,8,9

这样我们完成了冒泡排序啦。