牛客网学习笔记(归并排序)

132 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

题目来自牛客网的华为机试题库,本题目为简单题

归并排序

题目描述

请编程实现一个整型数组的归并排序。本题会人工判断,请严格按照题目描述完成

输入描述: 一个无序的整型数组,输入格式见输入样例 输出描述: 一个有序的整型数组,输出格式见输出样例

示例1 输入: [3, 1, 4, 5, 17, 2, 12]
输出: [1, 2, 3, 4, 5, 12, 17]

代码
x = list(map(int,input().strip('[').strip(']').split(',')))
def rank(x):
    if len(x) <= 1:
        return x
    mid = len(x) // 2 
    left = rank(x[:mid])
    right = rank(x[mid:])

    i = 0
    j = 0
    re = []
    while i < len(left)  and j < len(right):
        if left[i] < right[j]:
            re.append(left[i])
            i += 1
        else:
            re.append(right[j])
            j += 1
    re += left[i:]
    re += right[j:]
    return re
print(rank(x))

解析

因为我不是计算机专业的,对于算法算是完全的外行,之前一直不理解为什么明明有简单的内置函数,leetcode上很多人写题解的时候都不用,使用已有的工具不是会简化问题吗。后来才发现是因为有的题目会要求不能使用内置函数来排序,直接使用内置函数会使题目变得没有意义,所以写算法题的人们为了练习以达到提高代码熟悉度的目的,在写每个算法题的时候基本都不会直接用sort来进行排序。
归并排序算是几大基本的排序算法了,归并排序使用的是分而治之的思想:
1.先把一列数不断地分成两部分,直到每一部分只有一个数字的时候返回原数字
2.然后再从单个数字开始,一步一步的退回来将每一步中分成两部分的数进行排序组合成一个完成排序的数列
3. 最后得到一个完整的排好序的数列。