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

通过测试

相关推荐
花果山总钻风24 分钟前
SQLAlchemy 中的 func 函数使用指南
python
知识中的海王38 分钟前
Python html 库用法详解
开发语言·python
面朝大海,春不暖,花不开1 小时前
使用 Python 正则表达式实现文本替换与电话号码规范化
python·mysql·正则表达式
淘小白_TXB21961 小时前
Python网页自动化Selenium中文文档
python·selenium·自动化·网页自动化
Clair-Sean1 小时前
【JavaSE】多线程基础学习笔记
笔记·python·学习
EverBule2 小时前
Python 训练 day46
开发语言·python
WangY_ZQ3 小时前
Python 如何在Python 3.6上安装PIP
linux·python·pip
聚客AI3 小时前
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
人工智能·pytorch·python·rnn·神经网络·机器学习·自然语言处理
狮子也疯狂3 小时前
基于Python的气象数据分析及可视化研究
python·信息可视化·数据分析
蓝婷儿4 小时前
6个月Python学习计划 Day 18 - 项目实战 · 学生成绩管理系统(OOP版)
开发语言·python·学习