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()

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值