算法--冒泡排序(1)

2018-02-22  本文已影响0人  小囧兔

首先排序分为四种:

  交换排序: 包括冒泡排序,快速排序。

  选择排序: 包括直接选择排序,堆排序。

  插入排序: 包括直接插入排序,希尔排序。

  合并排序: 合并排序。

一、冒泡排序

冒泡排序就像是抓一堆东西扔水里,重的沉在底部,轻的依次往上浮。


image.png

经过几次比较得到如下的结果:


image.png
外层循环表示的是要比较的次数,i=0;第一次比较,里层循环比较2和4,2比4小,不交换,4和5比较,4比5小,不交换,5和1比,交换,5和9比,5比9小,不交换,
上面的图只是第一次比较,也就是外层循环第一次循环的时候得到的结果是[2,4,1,5,9];

因为第一次循环的时候已经把最大的数沉在底部了,所以,外层第二次循环的时候,没有必要去比较数组的最后两项,里面不用再循环arr.length-1;而是arr.length-1-i;

  var arr=[2,4,5,1,9];
    function maopao(arr){
        //第一层循环: 表明要比较的次数,比如arr.length-1个数,肯定要比较arr.length-1次
        for(var i=0;i<arr.length-1;i++){
 //第二层循环:里面的循环再次完整执行,由于最大的数已经在最后了,没有必要去比较数组的最后两项
            for (var j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                     var t=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=t;
                }
            }
        }
        return arr;
    }
   console.log( maopao(arr)+"冒泡排序")

时间复杂度之类的,现在还不是很明白,不过总算明白了冒泡排序的里层循环的长度为何是数组-1-外层循环了

上一篇下一篇

猜你喜欢

热点阅读