美文网首页
用javascript实现冒泡排序

用javascript实现冒泡排序

作者: 王伯卿 | 来源:发表于2018-02-04 18:44 被阅读0次

    思路:双重循环比较
    1)从第一个数字开始扫描,并且比较第一个和第二个数字
    1-1 如果第一个数字大于第二个数字,则交换位置
    1-2 如果第一个数字小于第二个数字,则比较第二个和第三个数字,依次类推,直到最大的数字到最后一位,然后转回(1)。

    比如:
    5 4 3 2 1
    经历过第一轮的bubble sort后应该是:
    4 3 2 1 5

    首先如果有N个数字,那我们只要进行N-1趟排序。
    这个很好理解,如果只有2个数,那我们两个数对比一次就够了。同样的道理,如果有100000个数字,进行完第99999次后,最小的数字必然在第一个。

    另外如果有N个数字,我们进行第一轮冒泡排序的时候,最大的数假设为A,已经处于最后一个,那我们接下来从第一个开始比较的时候,最后一个数字就没有必要再对比,我们设第几趟排序为C,所以第二次需要对比的数字个数就是:N-1-C。

    接下来我们就可以编码了。这里为了方便就直接写了。

    var bubbleSort=function(arr){
      //第一重循环,i表示排序多少趟
      for(var i=0;i<arr.length-1;i++){
        //第二重循环,j表示从第一个开始比较多少个数字
        // 如果有5个数字,那j到4就可以了
        // 如果有10000个数字,那j到9999就可以了
        // 这边下标和数字个数有点出入,所以有点难理解
        // 假设有11个数字,第0趟,需要对比第一个开始到第11个,即对比10次,所以j应该小于11-1
        // 第一趟,需要对比从第一个开始到第10个,即对比9次,所以j应该小于11-2
        // 依次类推
        for(var j=0;j<arr.length-1-i;j++){
          // 如果第一个数比第二个数大就交换位置
          if(arr[j]>arr[j+1]){
            var temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
          }
        }
      }
      return arr;
    };
    var array=[10,9,8,7,6,5,4,3,2,1,0];
    console.log(bubbleSort(array));
    

    最后一张渣图是让我备忘的,大家请忽略。


    i和j的关系.png

    假设5个数字:
    第0趟,第一个数字需要对比4次
    第1趟,第一个数字需要对比3次
    第2趟,第一个数字需要对比2次
    第3趟,第一个数字需要对比1次
    5个数字,总共需要4趟对比。
    i和j的边界应该是:

    i<arr.length-1
    j<arr.length-1-i
    

    相关文章

      网友评论

          本文标题:用javascript实现冒泡排序

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