学习笔记 Day 20 (数据结构算法 -- 排序与搜索 1)

排序算法的稳定性:

排序前后,子的序列和原有的顺序相同的就是稳定的,不同则是不稳定的.

冒泡排序:

第一次交换过程示例图:

代码实现:

def bubble_sort(a_list):
    '''冒泡排序'''
    n = len(a_list)
    for j in range(n-1):
        for i in range(n-1-j):
            '''从头排到尾'''
            if a_list[i] < a_list[i+1]
                a_list[i],a_list[i+1] = a_list[i+1],a_list[i]

时间复杂度:o(n^2) 

稳定性: 稳定

优化时间复杂度:

def bubble_sort(a_list):
    '''冒泡排序'''
    n = len(a_list)
    for j in range(n-1):
        coun = 0
        for i in range(n-1-j):
            '''从头排到尾'''
            if a_list[i] < a_list[i+1]
                a_list[i],a_list[i+1] = a_list[i+1],a_list[i]
                count += 1
        if 0 == count:
            '''列表本身是有序时,直接退出循环'''
            break

选择排序:

从未排序的序列中选择最小的往前面去放.

代码:

def select_sort(a_list):
    '''选择排序'''
    n = len(a_list)
    for j in range(n-1): 
        min_index = j
        for i in rnage(j+1,n):
            if a_list[min_index] > a_list[i]
                min_index = i
        a_list[i],a_list[min_index] =  a_list[min_index],a_list[i]

时间复杂度: o(n^2) 

稳定性: 不稳定(升序排序时不稳定)

插入排序算法:

将序列分为有序和无序两部分,然后把后面无序的插入前面有序的序列中.

代码:

def insert_sort(a_list):
    n = len(a_list)
    '''插入排序'''
    for j in (1,n):
        i = j
        whlie i > 0:
            if a_list[i] < a_list[i-1]
                a_list[i],a_list[i-1] = a_list[i-1],a_list[i]
                i -= 1
            else:
                break # 内存优化,此时内部循环时间复杂度o(1)

时间复杂度: o(n^2)

稳定性:稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值