常见排序算法

一.冒泡排序

基本思路:

  • 对无序表进行多趟比较交换。

  • 每趟包括多次两两相邻比较,并将逆序的数据项互换位置,最终将本趟的最大项就位。

  • 经过n-1趟比较排序,实现整表排序。

实现过程:

  • 第1趟比较交换,共有n-1对相邻数据进行比较。(一旦经过最大项,则最大项会一路交换到达最后一项)。

  • 第2趟比较交换,共有n-2对相邻数据进行比较。第二大的项会一路交换到倒数第二项。

  • 直到第n-1趟完成后,最小项一定在列表首位,就不需要处理了。

def bubbleSort(alsit):
    for passnum in range(len(alsit)-1, 0, -1):   # 经过n-1趟比较,(n-1 到 1)
        for i in range(passnum):
            if alsit[i] > alsit[i+1]:
                alsit[i], alsit[i+1] = alsit[i+1], alsit[i]

    return alsit

时间复杂度: 比较O(n2),交换O(n2)

缺点: 效率低,每个数据项在找到最终的位置之前,必须要经过多次的比较和交换,其中大部分的操作是无效的。

优点: 不需要任何额外的存储空间开销。

二.选择排序

基本思路:

  • 选择排序对冒泡排序进行了改进,保留多趟比较的思路,每趟都使当前最大项就位。

  • 但每趟只交换一次。(记录最大项的位置,再和本趟的最后一项交换)

def selectSort(alist):
    for fillslot in range(len(alist)-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值