Python数据结构与算法5-排序算法1

本文深入讲解了三种基本的排序算法:冒泡排序、选择排序和插入排序。详细介绍了每种算法的工作原理、实现方式及时间复杂度,并分析了其稳定性。适合初学者理解和掌握排序算法的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 排序算法(Sorting Algorithem)
    将一串数据按一定顺序排列的算法。

    排序算法的稳定性:
    稳定的排序算法会让原本键值相同元素保持原有的相对位置。不稳定的排序算法可以被人为实现为稳定,如人工扩充键值的比较,但如此会造成额外的空间负担。

  • 冒泡排序(Bubble Sort)
    重复遍历数列,若相邻两元素大小顺序错误,则交换位置,直至排序完成。

    实现方式:

#1. 冒泡排序
def bubble_sort(alist):
    n = len(alist)
    for i in range(n-1):
        # 第一层循环:冒泡需要进行的轮数
        count = 0
        for j in range(n-1-i):
            #第二层循环:遍历两两比较
            if alist[j] > alist[j+1]:
                alist[j], alist[j+1] = alist[j+1], alist[j]
                count += 1
        if count == 0:
        	#若一次遍历没有交换位置,则排序已完成,直接输出结果
            return

最优时间复杂度:O(n):正好为有序序列时,只需遍历一次
最坏时间复杂度:O(n2)
稳定性:稳定

  • 选择排序(Selection Sort)
    重复遍历数列,每次寻找数列中的最大(小)值,与遍历起始位置值交换,直至排序完成。

    实现方式:

# 2. 选择排序
def selection_sort(alist):
    n = len(alist)
    for i in range(n-1): # 第一层循环:选择需要进行的轮数
        # 首先假定循环起始元素为最小元素
        min_index = i
        for j in range(i+1, n):
            # 如发现更小元素,更改最小索引值
            if alist[j] < alist[min_index]:
                min_index = j
        alist[i], alist[min_index] = alist[min_index], alist[i]

最优时间复杂度:O(n2)
最坏时间复杂度:O(n2)
稳定性:不稳定:升序每次选最大值时

  • 插入排序(Insertion Sort)
    从数列头端开始构建有序序列,依次遍历余下元素,从后向前扫描,将它们插入到有序序列的正确位置上。

    实现方式:

# 3. 插入排序
def insertion_sort(alist):
    n = len(alist)
    for i in range(1,n): #从第二个元素开始向后遍历
        while i > 0:
            if alist[i-1] > alist[i]: # 将序列调整为有序序列
                alist[i-1], alist[i] = alist[i], alist[i-1]
                i -= 1 # 从后向前扫描
            else: # 若发现无需调整,直接退出循环
                break

最优时间复杂度:O(n): 正好为有序序列时,只需遍历一次
最坏时间复杂度:O(n2)
稳定性:稳定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值