栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python-数据结构与算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python-数据结构与算法

1、冒泡排序
# 冒泡排序:将相邻的元素以此比较、重复比较列表元素、降序还是升序都可、

def sorted1(alist):
    n = len(alist)
    # i表示第几轮冒泡(i的数量表示遍历的次数)
    for i in range(n-1):
        print(i)
        # j表示访问到的元素索引
        for j in range(n-1-i):
            print(j)
            if alist[j] > alist[j+1]:
                alist[j],alist[j+1] = alist[j+1],alist[j]
    return alist

if __name__ == '__main__':
    alist = [9,1,3,2,8]
    print(sorted1(alist))
2、插入排序
# 插入排序:将未排序的序列的值插入到已排序的序列中
# 思路:假设成两个序列,一个是已排序的一个是未排序的,初始化时已排序的是空序列 输入的整个序列是未排序
def insert_sorted(alist1):
    n1 = len(alist1)
    print(n1)
    # 把未排序的序列遍历
    for i in range(n1):
        # 未排序的序列从头到尾做为准备插入的数据
        insertdata = alist1[i]
        while i >= 1:
            if alist1[i-1] > insertdata:
                alist1[i] = alist1[i-1]
            else:
                break
            i = i-1
            alist1[i] = insertdata
    return alist1

if __name__ == '__main__':
    alist1 = [9,10,1,6,4,7]
    print(insert_sorted(alist1))
3、希尔排序
def shell_sort(alist):
    '''希尔排序:将序列平均分成两组,然后第一组的第一个元素和 第二组的第一个元素比较。
    第一组的第二个元素和 第二组的第二个元素比较。
    。。。
    如果出现最后一个元素没有分组的、就会相邻元素一次比较
    '''
    n = len(alist)
    gap = n//2
    #gap变化到0之前,插入算法执行的次数
    while gap > 0:
        #插入算法,与普通的插入算法的区别就是gap步长
        for j in range(gap, n):
            i = j
            while i > 0:
                if alist[i] < alist[i-gap]:
                    alist[i], alist[i-gap] = alist[i-gap], alist[i]
                    i -= gap
                else:
                    break
        #缩短gap步长,得到新的步长
        gap = gap // 2
'''最优时间复杂度:根据步长序列的不同而不同
最坏时间复杂度:O(n*n)
稳定性:不稳定'''
if __name__ == '__main__':
    li = [54, 26, 93,1,6,3,9]
    shell_sort(li)
    print(li)

4、直接选择排序
"""
直接选择排序:最直观的简单排序方法、
每次遍历都是从待排序的序列里选出最小或最大的元素 放在序列的起始位置、直到全部排完
"""
def SelectSort(alist):
    n = len(alist)
    # 第i个元素和后面的每一个元素都会比较一遍
    for i in range(n):
        print(i)
        for j in range(i+1,n):
            print(j)
            if alist[i] > alist[j]:
                alist[i],alist[j] = alist[j],alist[i]
    return alist

if __name__ == '__main__':
    alist = [9,11,5,1,7,3,8]
    print(SelectSort(alist))
5、堆排序
 
6、归并排序 
 
7、基数排序 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号