001算法之冒泡排序,选择排序,插入排序

1.冒泡排序:

过程

列表每两个相邻的数,如果前面的比后面的大,则交换这两个数。 一趟排序完成后,则无序区减少一个数,有序区增加一个数

特点

每一趟都是对无序区进行的

冒泡排序需要进行n-1趟

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

优化,如果某一趟后不再发生交换,则已经排序完成

python代码

def bubble_sort(list):
    for i in range(len(list)-1):           #第i趟
        for j in range(len(list)-i-1 ):    #指针的位置(当前下标)
            if list[j]>list[j+1]:           #改为<则为降序排列
                list[j],list[j+1]=list[j+1],list[j]

#优化
def bubble_sort1(list):
    for i in range(len(list)-1):           #第i趟
        exchange=False
        for j in range(len(list)-i-1 ):    #指针的位置(当前下标)
            if list[j]>list[j+1]:           #改为<则为降序排列
                list[j],list[j+1]=list[j+1],list[j]
                exchange=True
        print(list)
        if exchange==False:
            return

2.选择排序

过程

每次找出最小的数,n-1趟,时间复杂度为O(n^2)

代码

def select_sort0(list):
    list_new=[]
    for i in range(len(list)):
        min_val=min(list)           #O(n)
        list_new.append(min_val)
        list.remove(min_val)        #O(n)
    return list_new

#优化  每次找到最小值后将其放在最前面
def select_sort2(list):
    for i in range(len(list)-1): #第i趟
        min_loc=i
        for j in range(i,len(list)):
            if list[j]<list[min_loc]:
                min_loc=j
        list[i],list[min_loc]=list[min_loc],list[j]
        print(list)


list=[3,1,5,9,7,2,6]
print(select_sort2(list))

插入排序

过程

初始有序
从无序区摸一张牌,插到有序区的正确位置
时间复杂度为O(n^2)

代码

def insert_sort(list):
    for i in range(1,len(list)): #i 为摸到的牌的下标
        temp=list[i]
        j=i-1  #j指的是手里的牌的下标
        while j>=0 and list[j]>temp:
            list[j+1]=list[j]         #如果手上的牌比摸上来的牌大,则把手上的牌向后移一个位置
            j-=1
        list[j+1]=temp            #经过上面的while循环后,摸到的这张牌已经到了正确位置上,其下标变为原有序区中最后一个大于它的值的下标

li=[3,5,2,1]
insert_sort(li)
print(li)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值