基础算法

72 阅读1分钟

冒泡算法

就是两两比较到最后

代码

        function bubble(arr){
            var length=arr.length;
            //外循环:长度为5,只要循环4次
            //n-1的顺序排好之后,第N个自然也就拍好了
            for(var i=0;i<length-1;i++){
                //内循环:外面排好一次,里面就少一次:-i;
                //最多也只要长度-1次
                for(var j=0;j<length-i-1;j++){
                    if(arr[j]>arr[j+1]){
                        var temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp
                    }
                }
            }
            console.log(arr);
        }

选择排序

就是每次选出最小的排在前面

  • 关键点,从0的位置开始,比较简单
  • 用到了选择最大的一个数!
        function inset(arr) {
            for(var i=0;i<arr.length-1;i++){
                var min=i;
                for(var j=i+1;j<arr.length;j++){
                    if(arr[j]<arr[min]){
                        min=j
                    }
                }
                var temp=arr[min];
                arr[min]=arr[i]
                arr[i]=temp;
            }
            console.log(arr);
        }

插入排序

  • 从arr[1]开始拿出每个数与之前的数进行比较
  • 要用常量temp来保存比较数
        function insert(arr){
            var length=arr.length;
            for(var i=1;i<length;i++){
                var temp=arr[i];
                var j=i;
                //j-1>=0;就是说arr[j-1]要取到arr[0]
                while(arr[j-1]>temp&&j-1>=0){
                    arr[j]=arr[j-1];
                    j--;
                }
                arr[j]=temp;
            }
            console.log(arr);
        }
        insert(arr)

希尔排序

  • 三个循环
  • 高级版的插入排序
let gap=Math.floor(arr.length/2)
            while(gap>=1){
                for(var i=gap;i<arr.length;i++){
                    var j=i;
                    var temp=arr[i]
                    //通过gap来进行分组
                    while(arr[j-gap]>temp&&j>gap-1){
                        arr[j]=arr[j-gap];
                        j-=gap;
                    }
                    arr[j]=temp;
                }
                gap=Math.floor(gap/2)

快排顺序

        function quickSort(arr,begin,end){
            if(begin>=end){
                return
            } 
            var l=begin;
            var r=end;
            var temp=arr[begin]
            while(l<r){
                while(l<r&&arr[r]>=temp){
                    r--;
                }
                while(l<r&&arr[l]<=temp){
                    l++;
                }
                [arr[l],arr[r]]=[arr[r],arr[l]]
            }
            [arr[begin],arr[l]]=[arr[l],arr[begin]]
            quickSort(arr,begin,l-1);
            quickSort(arr,l+1,end)
        }