zoukankan      html  css  js  c++  java
  • 前端排序算法

    归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略,

    (divide)成一些小的问题然后递归求解,

    治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起。

    代码演示gif:

     

    归并排序算法我们采用递归的方法   先将数组一直进行折半拆分 拆到长度为一的数组  再两两合并 

    比如:  [5, 6, 3, 1, 8, 7, 2, 4]

    1. 先将数组一直进行折半拆分 拆到长度为一的数组 
    比如 
    [ 5 ] [ 6 ]  [ 3 ] [ 1 ] 
    2. 再拆分的个体进行两两合并 用 merge 方法
    得到 
    
    [ 5, 6 ] 和 [ 1, 3 ]
    
    再将这两个数组进行合并 得到 
    
    [1, 3 , 5, 6]
    
    这个时候左边合并完成  
    
    进行右边拆分合并
    
    
    [ 8 ] [ 7 ] 和 [ 2 ] [ 4 ] 
    
    得到 
    
    [2, 4 , 7 , 8 ]
    
    所以我们这个时候得到两个数组 
    
    [1, 3 , 5, 6] 和  [2, 4 , 7 , 8 ]
    
    对这两个数组进行合并 得到最后结果 
    
    1,2,3,4,5,6,7,8

    白话思路:

    先拆分 再合并 
    先拆分左边的 拆分到个体为1  的数组再进行两两合并  得到最终结果 
    接着对右边进行同样操作 
    得到最终结果
    这个时候左边和右边都得到长度为 n/ 2  的排序好的数组了 
    最后一步 将左右两边进行merge  重新排序 

     js  的代码实现 归并排序算法:

    let data = [5, 6, 3, 1, 8, 7, 2, 4]
    console.log(mergeSort(data))
    function mergeSort (arr) {
        var 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)
        return merge(mergeSort(left), mergeSort(right))
    }
    function merge(left, right) {
        let result = []
        while (left.length> 0 && right.length> 0) {
            if (left[0] <= right[0]) {
               result.push(left.shift())
            } else {
                result.push(right.shift())
            }
        }
        while(left.length) 
            result.push(left.shift())
        while(right.length) 
            result.push(right.shift())
        return result;
    }

    git 地址: https://gitee.com/guangzhou110/front-end-sorting-algorithm

    越努力越幸运
  • 相关阅读:
    React Native商城项目实战08
    React Native商城项目实战07
    React Native商城项目实战05
    React Native商城项目实战06
    React Native商城项目实战04
    React Native商城项目实战03
    React Native商城项目实战02
    单选框input:radio
    myDate97用法
    STRUTS2配置动态页面
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/14493692.html
Copyright © 2011-2022 走看看