Bubble sort and quick sort of JS classic sort, entry-level handwritten implementation.

1. Although the front-end algorithm system is rarely used in actual work, the most basic array sorting still needs to be known, especially bubble sorting and quick sorting. These two sortings also appear frequently in interviews, so this article uses Animation and handwriting to demonstrate these two most basic array sorting algorithms.

2. Don't talk much, just serve the main course.

  • Bubble Sort

let arr = [23, 56, 520, 920, 888, 666];

    // 冒泡排序(写法一)
    function mp1(arr) {
      if (arr.length < 2) {
        return arr
      } else {
        for (let i = 0; i < arr.length; i++) {
          for (let j = 0; j < arr.length; j++) {
            if (arr[j] > arr[j + 1]) {
              [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
            }
          }
        }
        return arr //一定要return出来,不然就是undefined
      }
    }

    console.log(mp1(arr));  //打印 [23, 56, 520, 666, 888, 920]
let arr = [23, 56, 520, 920, 888, 666];

    // 冒泡排序(写法二)
    function mp2(arr) {
      if (arr.length < 2) {
        return arr
      } else {
        for (let i = 0; i < arr.length - 1; i++) {
          for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] > arr[j]) {
              [arr[i], arr[j]] = [arr[j], arr[i]]
            }
          }
        }
        return arr
      }
    }

    console.log(mp2(arr)); //打印 [23, 56, 520, 666, 888, 920]

  • quick row

 

let arr = [23, 56, 520, 920, 888, 666];

    // 快排(写法一)
    function findMid(arr, left, right) {
      let x = arr[left];
      let i = left;
      let j = right;

      while (i < j) {
        //先从前往后找小的,没找的的话一直继续
        while (i < j && arr[j] > x) {
          j--;
        }
        //找到了,将值填入坑里面,a[j]又变成了坑
        if (i < j) {
          arr[i] = arr[j];
        }
        //然后从前往后找大的,没找到继续找。
        while (i < j && arr[i] < x) {
          i++;
        }
        //找到了,将值填入之前的坑里。
        if (i < j) {
          arr[j] = arr[i]
        }
      }
      //将基准值填入坑
      arr[i] = x;
      return i;
    }

    function kp1(arr, left, right) {
      let length = arr.length;
      let start = left || 0;
      let end = right !== undefined ? right : length - 1;
      if (start < end) {
        let index = findMid(arr, start, end)
        kp1(arr, start, index - 1); //调整基准值左边
        kp1(arr, index + 1, end); //调整基准值右边
      }
      return arr;
    }


    console.log(kp1(arr)); //打印 [23, 56, 520, 666, 888, 920]
let arr = [23, 56, 520, 920, 888, 666];

    // 快排(写法二)
    function kp2(arr) {
      if (arr.length <= 1) {
        return arr;
      }
      let leftArr = [];
      let rightArr = [];
      let q = arr[0];

      for (let i = 1; i < arr.length; i++) {
        if (arr[i] > q) {
          rightArr.push(arr[i])
        } else {
          leftArr.push(arr[i])
        }
      }
      return [].concat(kp2(leftArr), [q], kp2(rightArr));
    }


    console.log(kp2(arr)); //打印 [23, 56, 520, 666, 888, 920]

3. The above are the two array sorts that appear frequently in js, and each provides two relatively simple handwriting methods. If readers want to learn more about sorting or algorithm knowledge, don't bother to open the button and roll it up. Be a page boy who knows algorithms. 23333~

Guess you like

Origin blog.csdn.net/Yi2008yi/article/details/122498180