排序算法—归并排序算法分析与实现(Python)

December 28, 2015 1:32 PM
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为:
- 1)划分子表
- 2)合并半子表

归并算法用示意图表示如下:
这里写图片描述

#MergeSort.py
#王渊
#2015.12.23
#Email:wyxidian@gmail.com

from pylab import *

def MSort(dataA, dataB):                    #子表合并排序
    newData = []
    lengthA = dataA.__len__()
    lengthB = dataB.__len__()
    while(lengthA>0 and lengthB>0):         #两个子表均非空,依次取出第一个元素作比较
        if(dataA[0]<dataB[0]):              #取出较小的元素插入新表
            newData.append(dataA[0])
            dataA = dataA[1:lengthA]
        else:
            newData.append(dataB[0])
            dataB = dataB[1:lengthB]
        lengthA = dataA.__len__()
        lengthB = dataB.__len__()
    if(lengthA>0):                          #将剩余非空表中元素插入新表中
        newData = newData+dataA
    else:
        newData = newData+dataB
    return newData

def MergeSort(data):
    length = data.__len__()
    flag = mod(length,4)
    step = 2                            #每次按照2的整次幂将序列两两合并排序
    while step<length:
        for i in range(length//2):
            data[step*i:step*i+step] = MSort(data[step*i:step*i+step//2], data[step*i+step//2:step*i+step])
        if(mod((length//step),2)==1):
            data[step*(i+1):length] = MSort(data[step*(i+1):step*(i+1)+step//2], data[step*(i+1)+step//2:length])
        step = step*2
    data = MSort(data[0:step//2], data[step//2:length])

    return data


data = [48,1,16,62,73,88,24,59,99,0,35]
print("The original data is : ", data)
data = MergeSort(data)
print("The result of sorted data is : ", data)

运行结果:

The original data is :  [48  1 16 62 73 88 24 59 99  0 35]
The result of sorted data is :  [ 0  1 16 24 35 48 59 62 73 88 99]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值