【python】归并排序?

题目:实现归并排序。

分析:这是分而治之的方法。排序时先将数组分成两部分,并分别进行排序,然后再把排序好序的两部分整合成一个排序数组。假如数组arr = [3, 1, 5, 6, 7, 4, 2, 8],分为两部分[3, 1, 5, 6]和[7, 4, 2, 8]。前半部分又可以继续分成两部分,分别是[3, 1]和[5, 6]。接着分别对这两部分排序,于是变成了1, 3和5,6.然后把他们合并到一起,变成1,3,5,6.这样的话前半部分久排好序了,后半部分一样处理,于是两大部分就可以排好序,最后再合并成一个拍好序的数组。

code:

def mergeSort(A):

    if len(A) <= 1:

        return A

    # 把数组分成两部分分别排序

    half = int(len(A) / 2)

    first = mergeSort(A[0:half])

    second = mergeSort(A[half:len(A)])

    # 把两部分合并

    i = 0

    j = 0

    newA = []

    while i < len(first) or j < len(second):

        if i < len(first) and j < len(second):

            if first[i] <= second[j]:

                newA.append(first[i])

                i += 1

            else:

                newA.append(second[j])

                j += 1

        else:

            # 如果后半部数组已经全部插入,那么把前半部剩余元素插入新数组

            if i < len(first):

                newA.append(first[i])

                i += 1

            # 如果前半部数组已经全部插入,那么把后半部剩余元素插入新数组

            if j < len(second):

                newA.append(second[j])

                j += 1

    return newA

A = [3, 1, 5, 6, 7, 4, 2, 8]

print(mergeSort(A))

程序运行结果:

[1, 2, 3, 4, 5, 6, 7, 8]


你可能感兴趣的:(【python】归并排序?)