【python练习】三种排序算法

复制代码
排序算法
Description

试用选择算法或冒泡算法或快速排序算法对一列数进行升序排列。

如:

9 9 1 4 10 2 1 8 7 4

排列后为:

1 1 2 4 4 7 8 9 9 10


Input
一列若干个整数


Output
排序后的一列整数


Sample Input 1 

9 9 1 4 10 2 1 8 7 4
Sample Output 1

1 1 2 4 4 7 8 9 9 10
Hint

本题主要练习各种排序算法。如果只是为了AC,当然只用内置sorted函数即可。

Source

中学生可以这样学Python,P190-P193例8-21,例8-22,例8-23

冒泡排序

复制代码
#冒泡排序,每个元素,都跟相邻元素比大小,一直比到最后一个
a=list(map(int,input().split()))
for i in range(len(a)-1):
    #print(a[i])
    for j in range(i+1,len(a)):
        if a[i]>a[j]:
            a[i],a[j]=a[j],a[i]
print(*a)

测试时候有两个节点超时

选择排序

复制代码
#选择排序,每次扫描剩余数中最大值或最小值与当前位置数交换
a=list(map(int,input().split()))
for i in range(len(a)-1):
    small=min(a[i+1:])
    index=a[i+1:].index(small)+i+1
    if a[i]>a[index]:
        a[i],a[index]=a[index],a[i]
print(*a)

a=list(map(int,input().split()))
for i in range(len(a)-1):
    k=i
    for j in range(i+1,len(a)):
        if a[j]<a[k]:
            k=j
    if i!=k:
        a[i],a[k]=a[k],a[i]
print(a)

测试时候有两个节点超时

快速排序

复制代码
a=list(map(int,input().split()))

def kuaisu(a,l,r):
    if l>=r:
        return
    i=l
    j=r
    p=a[l]
    while i<j:
        while i<j and a[j]>=p:
            j=j-1
        a[i]=a[j]
        while i<j and a[i]<=p:
            i=i+1
        a[j]=a[i]
        #a[i],a[j]=a[j],a[i]
    a[i]=p
    kuaisu(a,l,i-1)
    kuaisu(a,i+1,r)
kuaisu(a,0,len(a)-1)
print(*a)

上面仿照书本上的快速排序,但没太看懂,根据这个视频【Python小知识】星途文化_python19:快速排序的概念和实现学了一个不太一样的,迷惑

复制代码
#快速排序,每次选一个数,以此为分界点将元素分成两部分,前面的比该元素小,后面的比该元素大,重复,直到排好
a=list(map(int,input().split()))
def kuaisu(alist):
    if len(alist)<=1:
        return alist
    p=alist[len(alist)//2]
    left=[x for x in alist if x<p]
    mid=[x for x in alist if x==p]
    right=[x for x in alist if x>p]
    return kuaisu(left)+mid+kuaisu(right)
print(*kuaisu(a))

通过测试

相关推荐
羲云网络2 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
橙橙笔记5 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事6 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力8 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力8 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A8 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖8 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks9 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
青少儿编程课堂10 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
tellmewhoisi10 小时前
nlp:知识库检索和dify知识库创建
python·自然语言处理