排序算法

快速排序法

image.png
function quick(arr) {
      //4.结束递归,(当arr中小于等于一项,则不用处理)
      if (arr.length <= 1) {
          return arr
      }

      //1.找到数组的中间项,在原有数组中把它移除
      let middleIndex = Math.floor(arr.length / 2)
      let middleValue = arr.splice(middleIndex, 1)[0]

      //2.准备左右两个数组,循环剩下数组中的每一项,当比中间值小的放到左边数组中,反之放到右边数组中
      let arrLeft = []
      let arrRight = []

      //3.递归方式让左右两边的数组持续这样处理,一直到左右两边都排好序为止
      //到最后让左边+中间+右边拼接成最后的结果
      for (let i = 0; i < arr.length; i++) {
          let item = arr[i]
          item < middleValue ? arrLeft.push(item) : arrRight.push(item)
      }

     // return quick(arrLeft).concat(middleValue, quick(arrRight))
       return [...quick(leftArr),middleValue,...quick(rightArr)]
  }

冒泡排序法

  • 冒泡排序的思想:

让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后即可)

  • image.png
  • function bubble(arr) {
               let temp = null;
               //外层循环控制比较的轮数
               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]) {
                           temp = arr[j]
                           arr[j] = arr[j + 1]
                           arr[j + 1] = temp
                       }
                   }
               }
    
               return arr;
           }
    

插入排序

把一个数插入到一个有序数列的合理位置,并使插入后数列仍然有序,

不断重复这个过程就能使整个数组成为有序数列

function insert(ary){
    // 1.准备一个新数组,用来存储抓到手里的牌,开始先抓一张牌进来
    let handle=[];
    handle.push(ary[0]);

    // 2.从第二项开始依次抓牌,一直到把台面上的牌抓光
    for(let i=1;i<ary.length;i++){
        // A是新抓的牌
        let A=ary[i];
        // 和HANDDLE手里的牌依次比较(从后向前比)
        for(let j=handle.length-1;j>=0;j--){
            // 每一次要比较的手里的牌
            let B=handle[j];
            // 如果当前新牌A比要比较的牌B大了,把A放到B的后面
            if(A>B){
                handle.splice(j+1,0,A);
                break;
            }
            // 已经比到第一项,我们把新牌放到手中最前面即可
            if(j===0){
                handle.unshift(A);
            }
        }
    }
    return handle;
}
let ary = [12,8,24,16,1];
ary=insert(ary);
console.log(ary);


//自己写的另一种方式
 function insert(arr){
         let handle = []
         handle.push(arr[0])

         for(var i=1;i<arr.length;i++){
             for(var j=0;j<handle.length;j++){
                 if(arr[i]<handle[j]){
                    handle.splice(j,0 ,arr[i])
                    break;
                 }

                if(j==handle.length){
                    handle.push(arr[i])
                }
             }
             
         }

         return handle
     }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容