zoukankan      html  css  js  c++  java
  • 冒泡排序,插入排序,快速排序总有一款适合你

    /**
     * 冒泡算法
     * 比较两两值,一次冒泡之后最右边的值肯定是为最大的
     * 第二次冒泡,就只要针对除去最后一个值的数值进行冒泡
     * [22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70]
     */
    function bubble_one_time(arr, j) {
        for (let i = 0; i < arr.length-j; i++) {
            const element = arr[i];
            if (arr[i] > arr[i+1]) {
                let temp
                temp = arr[i+1]
                arr[i+1] = arr[i]
                arr[i] = temp 
            }
        }
        return arr
    }
    function bubble_sort (arr) {
        for (let i = 0; i < arr.length; i++) {
            arr = bubble_one_time(arr, i)
        }
        return arr
    }
    /**
     * 插入排序
     * 从原数组一个一个遍历,将其放到新数组,但要
     * 维持新数组的序列
     */
    function insertSort (arr, l, r) {
        for (let i = l + 1; i <= r; i++) {
            if (arr[i] < arr[i-1]) {
                let temp = arr[i]
                let j = i
                while (j > l && arr[j-1] > temp ) {
                    arr[j] = arr[j-1]
                    j--
                }
                arr[j] = temp
            }
        }
    }
    /**
     * 快速排序
     * 是对冒泡排序的一种改进
     * 通过一趟排序将数据分为两部分,再对这两部分
     * 分别递归排序,以此类推
     * 双向的扫描比单项扫描快
     */
    function quick_sort(arr, l, r) {
        if (l < r) {
            let e = quick_one_time(arr, l, r) // e 是一次快排的分界线,以此对左右两边再进行快排
            quick_sort(arr, l, e-1)
            quick_sort(arr, e+1, r)
        }
        return arr
    }   
    function quick_one_time (arr,i,j) {
        // i 和 j是两个指针,初始的时候分别指向首尾
        // 设定一个基准值 初始为 arr[0]
        let pivot = arr[i]
        // 现在指针移动,
        while (i < j) {
            while(arr[j] > pivot && i < j){
                j--
            }
            arr[i] = arr[j]
            while (arr[i]< pivot && i < j) {
                i++
            }
            arr[j] = arr[i]
        }
        // 指针重叠,说明遍历完一次了
        arr[i] = pivot
        return i
    }
  • 相关阅读:
    文件操作
    三级菜单(低端版VS高端版)
    字符串内置方法
    简单购物车的实现
    pandas常用函数
    1.在CentOS 7上安装Docker
    2. IDEA 在同一工作空间创建多个项目
    7.SpringMVC注解@RequestParam全面解析
    6.@RequiresPermissions 注解说明
    1. 构建第一个SpringBoot工程
  • 原文地址:https://www.cnblogs.com/jjucap/p/11251544.html
Copyright © 2011-2022 走看看