美文网首页
常见排序算法

常见排序算法

作者: lwz4070 | 来源:发表于2021-02-24 17:46 被阅读0次
var testArr = [4, 12, 2, 7, 9,8]
    function swap(array, left, right) {
        let temp = array[left];
        array[left] = array[right];
        array[right] = temp;
    }

    /**
     * 冒泡排序
     */
    function bubble(arr) {
        for(let i = 0; i < arr.length; i ++) {
            for(let j = 0; j < arr.length - 1 - i; j ++) {
                if(arr[j] > arr[j+1]) swap(arr, j, j+1)
            }
        }
        return arr;
    }
    /**
     * 插入排序
     */
    function insertion(arr) {
        for(let i = 1; i < arr.length; i ++) {
            for(let j = i - 1; j >= 0; j --) {
                if(arr[j] > arr[j+1]) swap(arr, j, j+1)
            }
        }
        return arr;
    }
    /**
     * 选择排序
     */
    function selection(arr) {
        for(let i = 0; i < arr.length; i ++) {
            let minIndex = i;
            for(let j = i + 1; j < arr.length; j ++) {
                if(arr[j] < arr[minIndex]) {
                    minIndex = j;
                } 
            }
            swap(arr, i, minIndex);
        }
        return arr;
    }

    /**
     * 归并排序
     */
    function mergeSort(arr) {
        let len = arr.length;
        if(len < 2) {
            return arr;
        }
        let middle = Math.floor(len / 2);
        //拆分成两个子数组
        let left = arr.slice(0, middle);
        let right = arr.slice(middle, len);
        //递归拆分
        let mergeSortLeft = mergeSort(left);
        let mergeSortRight = mergeSort(right);
        //合并
        return merge(mergeSortLeft, mergeSortRight);
    }
    function merge(left, right){
        let result = [];
        while(left.length && right.length) {
            if(left[0] <= right[0]) {
                result.push(left.shift()) //每次都要删除left或者right的第一个元素,将其加入result中
            } else {
                result.push(right.shift())
            }
        }
        //将剩下的元素加上
        while(left.length) {
            result.push(left.shift())
        }
        while(right.length) {
            result.push(right.shift());
        }
        return result;
    }
    /**
     * 快速排序
     */
    function quickSort(arr) {
        if (arr.length <= 1) {//如果数组长度小于等于1无需判断直接返回即可 
            return arr;
        }
      var pivotIndex = Math.floor(arr.length / 2);//取基准点 
      var pivot = arr.splice(pivotIndex, 1)[0];//取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数
      var left = [];//存放比基准点小的数组
      var right = [];//存放比基准点大的数组 
      for (var i = 0; i < arr.length; i++){ //遍历数组,进行判断分配 
        if (arr[i] < pivot) {
          left.push(arr[i]);//比基准点小的放在左边数组 
        } else {
          right.push(arr[i]);//比基准点大的放在右边数组 
        }
      }
            //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1; 
      return quickSort(left).concat([pivot], quickSort(right));

    }
    // console.log(bubble(testArr))
    // console.log(insertion(testArr))
    // console.log(selection(testArr))
    // console.log(mergeSort(testArr))
    console.log(quickSort(testArr))

相关文章

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • 排序算法(四) 希尔排序(插入排序的进化)

    参考Java排序算法(四):希尔排序常见排序算法 - 希尔排序 (Shell Sort) 希尔排序算法是按其设计者...

  • Rust数据结构——排序算法(一)

    Rust数据结构——排序算法(一) 0x01 常见的排序算法 排序算法是数据结构中很常见的算法。如果你了解过数据结...

  • IOS常见算法

    常见算法: 快速排序: 选择排序: 冒泡排序: 测试代码:

  • 常见排序算法

    整理常见排序算法。

  • 开发者应该掌握的几种排序算法

    该篇文章主要介绍了算法基础以及几种常见的排序算法:选择排序、插入排序、冒泡排序、快速排序、堆排序。 一、算法基础 ...

  • 排序算法

    排序算法 排序是最基本的算法之一,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、堆排序、归并排序及快速排...

网友评论

      本文标题:常见排序算法

      本文链接:https://www.haomeiwen.com/subject/qhnsfltx.html