美文网首页
常见算法4、合并(归并)排序 Merge sort

常见算法4、合并(归并)排序 Merge sort

作者: 四月不见 | 来源:发表于2021-12-11 00:04 被阅读0次

一、简介

归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

二、算法原理:

假如如我这里有一组数据,归并排序过程如下:

通俗点来说,就是先分割,再合并。分割的过程中其实可理解为就是以二分法将数组分割成最小单元,然后再按顺序合并起来。

动图演示

三、代码实现:

1、Python 3 :

#分割
def merge_sort(arr):
    import math
    if len(arr) < 2:
        return arr
    else:
        middle = math.floor(len(arr)/2)
        pivot = arr[0]
        left, right = arr[0:middle], arr[middle:]
        return merge(merge_sort(left), merge_sort(right))
#合并
def merge(left,right):
    result = []
    while left and right:
        if left[0] <= right[0]:
            result.append(left.pop(0))
        else:
            result.append(right.pop(0))
    while left:
        result.append(left.pop(0))
    while right:
        result.append(right.pop(0))
    return result

myarr = [5,7,12,1,6,88,9,0]
print(merge_sort(myarr))

=============== 运行结果:===============
[0, 1, 5, 6, 7, 9, 12, 88]

2、PHP:

function merge_sort($arr){
    $length = count($arr);
    if($length<2){
        return $arr;
    }
    $middle = floor($length/2);
    $left = array_slice($arr, 0, $middle);
    $right = array_slice($arr, $middle);
    return merge(merge_sort($left), merge_sort($right));
}

function merge($left,$right){
    $result = [];
    while(count($left) > 0 && count($right) > 0){
        if ($left[0] <= $right[0]) {
            $result[] = array_shift($left);
        } else {
            $result[] = array_shift($right);
        }
    }
    while (count($left))
        $result[] = array_shift($left);
    while (count($right))
        $result[] = array_shift($right);

    return $result;
}

$my_arr = [5, 3, 6, 2, 10,1,18];
print_r(merge_sort($my_arr)); 

=============== 运行结果:===============
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 6 [5] => 10 [6] => 18 )

相关文章

  • 归并算法

    归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。归并算法的中心是归并两...

  • 归并排序和快速排序

    1.归并排序(Merge Sort) 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算...

  • 常见算法4、合并(归并)排序 Merge sort

    一、简介 归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer...

  • 归并算法

    归并排序(Merge Sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(D...

  • JavaScript的排序算法——归并排序

    归并排序(Merge Sort) 在计算机科学里,归并排序(Merge Sort)是一种通用有效的排序算法。通常情...

  • 排序 | 归并排序 Merge Sort

    【算法】归并排序 归并排序(Merge Sort)就是将两个或两个以上的有序表合并成一个有序表的过程。 归并排序的...

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用...

  • iOS - 归并排序

    Demo_github 归并排序: 归并排序(Merge Sort)是建立在归并操作上的一种有效的排序算法,算法主...

  • 归并排序

    来源:图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 归并排序(MERGE-SORT...

网友评论

      本文标题:常见算法4、合并(归并)排序 Merge sort

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