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

通过测试

相关推荐
a00234500137 分钟前
python类型转换&深浅拷贝
开发语言·python
星石传说44 分钟前
python绘制年平均海表温度、盐度、ph分布图
python·生信·环境数据·分布图
丁总学Java1 小时前
Cannot deserialize instance of java.lang.String out of START_ARRAY token
java·windows·python
魔道不误砍柴功4 小时前
Java中的Stream API:从入门到实战
java·windows·python
xinghuitunan4 小时前
时间转换(acwing)c/c++/java/python
java·c语言·c++·python
tekin5 小时前
Python 高级数据结构操作全解析:从理论到实践
数据结构·python·集合set·高级数据结构·集合操作·队列操作·堆操作
关关钧5 小时前
【R语言】绘图
开发语言·python·r语言
m0_748248025 小时前
爬虫自动化(DrissionPage)
爬虫·python·自动化
量化投资技术5 小时前
【量化科普】Arbitrage,套利
python·量化交易·量化·量化投资·qmt·miniqmt
量化投资技术6 小时前
【量化科普】Liquidity,流动性
python·量化交易·量化·量化投资·qmt·miniqmt