排序算法(上)

'''
冒泡排序:最大的数像水泡冒出来,排到最后,两个数比较如果前边的数大于后边的那换位置
def bubble_sort(alist):  顺序表
    # 列表长度
    n = len(alist)
    # 控制次数,总共冒泡了n-1次,
    for j in range(n-1):
        # 控制每次,用索引拿出alist的每个元素比较,关键就是当前的次数决定需要比较的索引个数 n-1-j,因为已经冒泡过的说明已经是最大的不需要再重复比较
        count = 0
        for i in range(0,n-1-j): 每次都是从0索引开始,n个数索引是0到n-1,只需要比较到倒数第二个数就可以(倒数第二个数和最后一个数比较就完事)
        索引是n-2,range右边开区间所以是n-1,第一次索引是0到n-1,第二次索引是0到n-2因为最大的一个数找出来了,所以是n-1-j
            if alist[i] > alist[i+1]:
                alist[i],alist[i+1] = alist[i+1],alist[i]
                count += 1
        if count == 0:
            break  如果是有序alist,冒泡第一次没有换过位置count仍然=0,那循环直接停止
'''


'''
选择排序:选择最小值放到最前边,前后两个数比较如果后边的数小于前边的那么记录最小值的索引,通过索引来找
第二次alist就分为两部分,有序部分和无序部分,第二次开始的起始位置索引就是1
def select_sort(alist):
    n = len(alist)
    # 控制起始位置,每次从不同的索引起始位置开始,第一次是0,找出一个最小值alist分为两部分,然后第二次是1,找出次小值,第三次是2
    # alist长度为n,索引是从0到n-1,需要比较到倒数第二个数,倒数第二个数和最后一个数比较就结束,所以索引需要遍历到n-2,range右边开区间不包括,所以range(n-1)
    for j in range(n-1):
        # min_index = j 最小值的索引,便于理解的引入,实际书写中省略,把min_index换成j
        # 起始位置的索引有了,那么从起始位置+1的索引开始遍历,前后比较,n个数n-1个索引
        for i in range(j+1,n):
            if alist[min_index] > alist[i]:
                min_index = i
        # 起始位置,最小值位置min_index已经等于i了
        alist[j],alist[min_index] = alist[min_index],alist[j]
'''


'''
插入排序:认为alist分为两部分,把索引0的位置当做有序部分,和后边的无序部分,在有序部分判断大小进行插入
def insert_sort(alist):
    n = len(alist)
    # 控制起始位置,第一次是索引为1的位置往有序部分插入,第二次是索引为2的位置插入,n个数最后一次是索引为n的位置插入
    for j in range(1,n):
        i = j 每次都是和需要插入的索引前一个位置开始比较大小
        while i > 0: 
            if alist[i] < alist[i-1]:
                alist[i],alist[i-1] = alist[i-1],alist[i]
                i -= 1 保证持续往前插入
            else:
                break
                
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值