美文网首页
归并排序

归并排序

作者: qianyewhy | 来源:发表于2017-09-19 17:31 被阅读20次

    ···

    !/usr/bin/env python

    -- coding: utf-8 --

    @Time : 2017/9/19 17:19

    @Author : Willpower-jiang

    @Site :

    @File : merge.py

    @Software: PyCharm

    """
    基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,
    即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
    归并过程:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,
    并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,
    直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。
    归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,
    再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。
    """

    import random

    随机生成0~100之间的数值

    def get_andomNumber(num):
    lists = []
    i = 0
    while i < num:
    lists.append(random.randint(0, 100))
    i += 1
    return lists

    归并排序

    def merge(left, right):
    i, j = 0, 0
    result = []
    while i < len(left) and j < len(right):
    if left[i] <= right[j]:
    result.append(left[i])
    i += 1
    else:
    result.append(right[j])
    j += 1
    result += left[i:]
    result += right[j:]
    return result

    def merge_sort(lists):
    if len(lists) <= 1:
    return lists
    num = len(lists) // 2 # python3 整数除法/会变浮点,改为//
    left = merge_sort(lists[:num])
    right = merge_sort(lists[num:])
    return merge(left, right)

    a = get_andomNumber(10)
    print("排序之前:%s" % a)

    b = merge_sort(a)

    print("排序之后:%s" % b)
    ···
    http://www.cnblogs.com/w2218/p/6155100.html

    相关文章

      网友评论

          本文标题:归并排序

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