关于选择、插入、快速、交换四个基本排序算法(Python

(另有动态演示、其他语言版本,留言私信发链接)

 

首先,简单说一下排排序算法(如图,8大基本排序算法)

 

一    直接插入排序 

时间复杂度:O(n^2)

思路:

整个列表分为两部分,一部分有序区[0,i-1],无序区[i,len-1],从无序区第一个元素key=list[i]开始,与序区元素从后往前依次进行比较;若key小于有序区某一元素list[j],则该有序区某一元素后移一位。即:list[j+1]=list[j],直到找到已排序的元素小于或者等于key的位置

实现代码:

list=[2,1,3,6,4]
for i in range(1,len(list)):
    key=list[i]
    j=i-1
    while j>=0 and key<list[j]:
        list[j+1]=list[j]
        j=j-1

    list[j+1]=key
print(list)

二   直接选择排序

时间复杂度:O(n^2)

思路:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

实现代码:

list=[2,1,3,6,4]
for i in range(0,len(list)-1):
    k=i
    for j in range(i+1,len(list)):
        if list[k]>list[j]:
            k=j
    list[k],list[i]=list[i],list[k]
print(list)

三    交换排序之冒泡排序

平均时间复杂度:

思路:对列表中相邻两个元素进行比较,较大的数永远会排在较后面,对每个元素重复执行,直至把队列按从小到大的顺序排列整齐

实现代码:O(n^2)

list=[2,1,3,6,4]
for i in range(0,len(list)-1):
    for j in range(0,len(list)-1-i):
        if list[j+1]<list[j]:
            list[j+1],list[j]=list[j],list[j+1]
print(list)

四    交换排序之快速排序

平均时间复杂度:O(nlogn)

思路:快速排序是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

实现代码:

def qsort(list,start,end):
    if start<end:
        i,j=start,end
        center=list[i]
        while i<j:#每循环一次,就把整个队列分为两个部分,一部分大于center,一部分小于center
            while i<j and center<=list[j]:
                j=j-1
            list[i]=list[j]#不满足while的判断条件,跳出置换位置
            while i<j and center>=list[i]:
                i=i+1
            list[j]=list[i]#不满足while的判断条件,跳出置换位置
        list[i]=center#循环结束之后,补上空余位置
        qsort(list,start,i-1)#递归调用qsort方法,执行第二次循环
        qsort(list,j+1,end)
    return list


list=[4,3,5,1,2,7]
qsort(list,0,len(list)-1)
print(list)

尽情留言说出不足

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值