日食三餐夜眠六尺

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

排序

排序

概述

  • 排序的稳定性:序列按某一关键字进行排序,排序前相等元素的先后次序在排序后保持不变,则称该排序方式是稳定的。

  • 内排序:待排对象全部进入内存中。

  • 外排序:排序过程需要在内外存之间多次交换数据。

  • 排序算法性能

    1. 时间性能
    2. 辅助空间
    3. 算法复杂度:
  • 七大排序算法

    简单算法:

    1. 冒泡排序
    2. 简单排序
    3. 直接插入排序

    改进算法:

    1. 希尔排序
    2. 堆排序
    3. 归并排序
    4. 快速排序

一、冒泡排序(Bubble Sort)

1.简单冒泡排序

  • 基本思想:从上往下,两层循环,每次第 i 个元素与下面剩余元素两两比较,如果反序则交换,直到没有反序的记录为止。

    def bubble_sort(alist):
        for i in range(len(alist)-1):
            for j in range(i,len(alist)):
                if alist[i] > alist[j]:
                    alist[i],alist[j] = alist[j],alist[i]
        return alist
    

2.正宗冒泡排序

  • 基本思想:从下往上(冒泡),两层循环,两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。

    def bubble_sort(alist):
        for i in range(len(alist)-1):
          for j in range(len(alist)-1,i,-1):
                if alist[j] < alist[j-1]:
                	alist[j],alist[j-1] = alist[j-1],alist[j] 
        return alist
    

3.优化冒泡排序

  • 基本思想:正宗冒泡排序算法的基础上添加标记变量exchange,用来判断每趟两两比较过程是否发生交换操作,若未发生则说明后面元素次序满足要求,排序提前完成。

    def bubble_sort(alist):
        exchage = True
        i = 0
        while exchage and (i<=len(alist)-1):
            exchage = False
            for j in range(len(alist)-1,i,-1):
                if alist[j] < alist[j-1]:
                    exchage = True
                    alist[j],alist[j-1] = alist[j-1],alist[j]                       	
            i=i+1
        return alist
    

二、选择排序

  • 基本思想:每次找出“最元素”

    def findSmallest(arr): # 最小元素索引函数
        smallest = arr[0]
        smallest_index = 0
        for i in range(1,len(arr)):
            if arr[i] < smallest:
                smallest = arr[i]
                smallest_index = i
        return smallest_index
    
    def selectSort(arr): # 选择排序
        newArr = []
        for i in range(len(arr)):
            smallest_index = findSmallest(arr)
            newArr.append(arr.pop(smallest_index))
        return newArr
    

posted on   chenxiaoyuan  阅读(83)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示