排序与搜索算法

本文详细介绍了排序算法,包括冒泡排序、选择排序、插入排序、希尔排序和快速排序的基本思想、流程、时间复杂度及稳定性。每个算法都有相应的Python实现,便于理解和实践。
摘要由CSDN通过智能技术生成

前言:以下排序均以升序为例
一、排序算法

  • 概念
    排序算法(英语:Sorting algorithm)是⼀种能将⼀串数据依照特定顺序进⾏ 排列的⼀种算法。
  • 稳定性
    稳定排序算法会让原本有相等键值的纪录维持相对次序

(4, 1) (3, 1) (3, 7)(5, 6)
(3, 1) (3, 7) (4, 1) (5, 6) (维持次序)
(3, 7) (3, 1) (4, 1) (5, 6) (次序被改变)

二、冒泡排序

  • 基本流程
  1. 游标 i从第一个元素开始,每遍历一次,游标i与其后面的元素比较一次大小
  2. 第一次寻找最大值(外层循环遍历一次),游标i需遍历到倒数第二个元素(倒数第一个元素不遍历)
  3. 第二次寻找最大值(外层循环j遍历第二次),游标需遍历到倒数第三个元素(倒数第一个元素已经是最大值,倒数第二个元素不遍历)
  4. 重复寻找最大值,直到倒数第二个最大值寻找完(最后一个最大值不用比较)

总结 :每次从序列中一步一步冒出一个最大值

  • 注:
    (1)外层循环j和内层循环i的关系
寻找最大值的次数(j)    游标需遍历到的元素(i)
j = 0                  i = len(sort_list) - 2(倒数第二个元素)
j = 1                  i = len(sort_list) - 3 = len(sort_list) - 2 -1 (倒数第三个元素)
j = 3                  i = len(sort_list) - 4 = len(sort_list) - 2 -2 (倒数第三四元素)
……
    

(2)最优时间复杂度: 序列本身是有序 O(n)
(3)最坏时间复杂度: 序列本身是倒序的 O(n2)
(4)稳定性:稳定(对相同数据不进行任何操作)

  • python实现
'''冒泡排序'''
def bubble_sort(sort_list):
      
    for j in range((len(sort_list)-1):      #每次选取最大值时需要比较元素个数
        count = 0          # 记录交换值得次数
        for i in range(len(sort_list)-1-j):       # 游标需遍历的元素个数(range函数取不到最后一个值)
            if sort_list[j] > sort_list[j+1]:
                sort_list[j],sort_list[j+1] = sort_list[j+1],sort_list[j]
             	count += 1
        if count == 0:                # 列表本身为有序列表
        	break
    return sort_list
    
if __name__ == "__main__":
	sort_list = [54,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值