月丶
js排序算法
2022-4-12 月丶


1、冒泡排序,时间复杂度O(n2),














    // 冒泡排序


    function bubbleSort (arr) {


      const len = arr.length


      for (let i = 0; i < len; i++) { // 共需要排序的位数


        for (let j = 0; j < len - i - 1; j++) { // 每次遍历确定最后一位


          if (arr[j] > arr[j + 1]) {


            [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]


          }


        }


      }


      return arr


    }





















2、快速排序,时间复杂度O(nlogn),是冒泡排序的优化版,将数组切割成左右两块,然后递归调用方法








    // 快速排序


    function quikSort (arr) {


      const len = arr.length


      if (len <= 1) return arr;


      const midIdx = parseInt(len / 2)


      const midVal = arr.splice(midIdx, 1)[0]


      const left = [], right = [];


      for (let val of arr) {


        val < midVal ? left.push(val) : right.push(val)


      }


      return [...quikSort(left), midVal, ...quikSort(right)]


    }






3、归并排序,时间复杂度O(nlogn),思想:将排序数组无限分割为左右两个数组,直到长度为1,然后开始合并相邻两个数组并排序











    // 归并排序


    function mergeSort (arr) {


      const len = arr.length


      if (len <= 1) return arr;


      const midIdx = parseInt(len / 2)


      const left = mergeSort(arr.slice(0, midIdx))


      const right = mergeSort(arr.slice(midIdx))


      return merge(left, right)


    }




    function merge (left, right) {


      const lLen = left.length


      const rLen = right.length


      let l = 0, r = 0, res = [];


      while (l < lLen && r < rLen) {


        res.push(left[l] < right[r] ? left[l++] : right[r++])


      }


      return [...res, ...(l === lLen ? right.slice(r) : left.slice(l))]


    }











4、选择排序,时间复杂度O(n2),选出最小值,放在排好序的后面一位








    // 选择排序


    function selectSort (arr) {


      for (let i = 0, len = arr.length; i < len; i++) {


        let k = i


        for (let j = i + 1; j < len; j++) {


          if (arr[j] < arr[k]) k = j


        }


        [arr[k], arr[i]] = [arr[i], arr[k]]


      }


      return arr


    }






5、插入排序,时间复杂度O(n2),遍历值与前面排好序的值进行比较,交换,最佳情况O(n)











    // 插入排序


    function insertSort (arr) {


      for (let i = 1, len = arr.length; i < len; i++) {


        let j = i


        const val = arr[j]


        while (j > 0 && val < arr[j - 1]) {


          [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]]


          j--


        }


      }


      return arr


    }













发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容