排序算法-python

#快速排序
def my_sort_3(data_list):
    k=0   
    def my_sort_3_1(data_list):    
        if len(data_list)<=1:                         # 若列表长度为0或1,直接输出        
            return data_list
    
        key = data_list[0]                            # 取数组的第一个数作为基准值
                                                                       
        l_list, m_list, r_list = [], [], []           # 定义空列表用来储存小于/等于/大于基准值的元素 
                                       
        for i in range(0, len(data_list)):            # 遍历列表,其他元素与基准值比较,归类、整理到三个列表中
            if data_list[i] < key:
                l_list.append(data_list[i])
            elif data_list[i] > key:
                r_list.append(data_list[i])
            else:
                m_list.append(data_list[i])       
        else:
            nonlocal k
            k+=1
            print('第%s次排序完成' % k)                
        return my_sort_3_1(l_list) + m_list + my_sort_3_1(r_list)  #递归调用
    my_sort_3_1(data_list)         
    return my_sort_3_1(data_list)

if __name__ == '__main__':
    a=[7,10,11,3,5,6]   
    print(my_sort_3(a))
    print()
    a=[7,7,11,3,5,6]  
    print(my_sort_3(a))

# 冒泡排序
def my_sort_2(data_list):
    for i in range(len(data_list)-1):
        for j in range(i,len(data_list)):
            if data_list[j] < data_list[i]:
                k = data_list[i]
                data_list[i] = data_list[j]
                data_list[j] = k
    return data_list

if __name__ == '__main__':
    a=[7,10,11,3,5,6]   
    print(my_sort_2(a))
    print()
    a=[7,7,11,3,5,6]  
    print(my_sort_2(a))

#选择排序
def my_sort_1(data_list):
    for i in range(len(data_list)-1):
        a=i
        for j in range(i,len(data_list)):
            if data_list[j] < data_list[a]:
                a=j
        if a!=i:
            data_list[i],data_list[a] = data_list[a],data_list[i]
    return data_list

if __name__ == '__main__':
    a=[7,10,11,3,5,6]   
    print(my_sort_1(a))
    print()
    a=[7,7,11,3,5,6]  
    print(my_sort_1(a))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值