python的排序算法

选择排序

选择排序,搜索整个列表,找到最小项的位置,如果该位置不是列表的第一个位置,也就是索引为零,算法就会交换着两个位置的项。然后,算法回到第二个位置并且重复这个过程。

动图

 

def selectionSort(alist):
    i = 0
    while i < len(alist):
        midIndex = i
        j = i +1
        # 搜索整个列表,找到最小项的索引
        while j < len(alist):
            if alist[midIndex] > alist[j]:
                midIndex = j
            j +=1
        # 如果最小值不是第一项就交换位置
        if alist[i] != alist[midIndex]:
            alist[i],alist[midIndex] = alist[midIndex],alist[i]

        i += 1
    return alist

alist = [14,12,15,1,3,8,2,4,6]
print(selectionSort(alist))

控制台输出:

[1, 2, 3, 4, 6, 8, 12, 14, 15]

这里函数包含了嵌套循环,对于大小为 n 的列表,外围的循环 n-1 次。在第 1 次通过外围循环的时候,内层循环执行 n-1次。在第 2 次通过外围循环的时候,内层循环执行 n-2次。

冒泡排序

冒泡排序,从列表的开头处开始,比较一对数据项,直到移动到列表的末尾。每当成对的两项之间的位置不正确的时候,就交换他们的位置。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

动图

 

 

def bubbleSort(alist):
    n = len(alist)
    while n > 1:
        i = 1
        while i < n:
            if alist[i] < alist[i-1]:
                alist[i],alist[i-1] = alist[i-1],alist[i]
            i +=1
        n -= 1
    return alist

alist = [14,12,15,1,3,8,2,4,6]
print(bubbleSort(alist))

控制台输出:

[1, 2, 3, 4, 6, 8, 12, 14, 15]

插入排序

def insert_sort(alist):
    '''插入排序'''
    n = len(alist)
    # 从右边的无序序列中取出多少个元素执行这样的过程
    for j in range(1,n):
        # i 代表的是内存循环起始值
        i = j
        # 执行从右边的无序序列中取出第一个元素,即第 i 位元素
        # 然后将其插入到前面的有序列表中
        while i > 0:
            if alist[i] < alist[i-1]:
                alist[i],alist[i-1] = alist[i-1],alist[i]
                i -=1
            else:
                break

if __name__ == '__main__':
    alist = [4,5,7,1,6,8,12,10]
    print(alist)
    insert_sort(alist)
    print(alist)

[4, 5, 7, 1, 6, 8, 12, 10]
[1, 4, 5, 6, 7, 8, 10, 12]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值