Python(算法综合)问题 D: 兵贵神速-快速排序

问题 D: 兵贵神速-快速排序

题目描述

未来的战争是科技的战争。
假如 A 国受到 B 国的导弹威胁,那么 A 国就要启用导弹防御系统,
根据卫星、雷达信息快速计算出敌方弹道导弹发射点和落点的信息,
将导弹的跟踪和评估数据转告地基雷达,发射拦截导弹摧毁敌方导弹或使导弹失去攻击能力。
如果 A 国的导弹防御系统处理速度缓慢,等算出结果时,导弹已经落地了,还谈何拦截?
    
现代科技的发展,速度至关重要。
我们以最基本的排序为例,生活中到处都用到排序,
例如各种比赛、奖学金评选、推荐系统等,排序算法有很多种,
能不能找到更快速高效的排序算法呢?

输入

t组样例
请先输入要排序的数据的个数n(n <= 10000)
 请输入要排序的数据

输出

排序后的序列

样例输入

1
9
30 24 5 58 18 36 12 42 39 

样例输出

5 12 18 24 30 36 39 42 58 

解答:

# 快速排序取mid值
def quick(li, left, right):
    tmp = li[left]  # 首先将左边的第一个值存起来
    while left < right:  # 当左右相等就退出循环
        # 只能在右边找,并且大于tmp,就加一
        while left < right and li[right] >= tmp:
            right -= 1
        li[left] = li[right]  # 找到就将这个数填到左边空缺部分
        while left < right and li[left] <= tmp:
            left += 1
        li[right] = li[left]  # 归位,左右相等,中间值
    li[right] = tmp
    return right


def quick_sort(data, left, right):
    if left < right:
        mid = quick(data, left, right)
        quick_sort(data, left, mid - 1)
        quick_sort(data, mid + 1, right)


n = int(input())
for i in range(n):
    n1 = int(input())
    li = list(map(int, input().split()))
    quick_sort(li, 0, len(li) - 1)
    # 输出
    for j in li:
        print(j, end=" ")
    print()

答案不唯一,必定有更加优化的解法欢迎分享

你可能感兴趣的:(Python_算法,数算,python,分治算法)