当前位置: 首页 > news >正文

网站综合查询工具建筑工程网教

网站综合查询工具,建筑工程网教,服务器 网站 搬家,国外的一个大学生做的匿名社交网站常见排序算法详解及其复杂度分析 排序算法是数据结构与算法学习中的基础内容,也是面试高频考点。本文将系统介绍几种常见的排序算法,包括它们的原理、时间复杂度、空间复杂度以及 Python 实现方法。 一、冒泡排序(Bubble Sort) …

常见排序算法详解及其复杂度分析

排序算法是数据结构与算法学习中的基础内容,也是面试高频考点。本文将系统介绍几种常见的排序算法,包括它们的原理、时间复杂度、空间复杂度以及 Python 实现方法。


一、冒泡排序(Bubble Sort)

原理

通过多次遍历待排序序列,每次比较相邻元素并交换顺序错误的元素,每一轮都将最大(或最小)元素“冒泡”到序列末尾。

实现

def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]

复杂度

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 稳定性:稳定

二、选择排序(Selection Sort)

原理

每次从未排序部分选择最小(或最大)元素,放到已排序部分的末尾。

实现

def selection_sort(arr):n = len(arr)for i in range(n):min_idx = ifor j in range(i+1, n):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]

复杂度

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 稳定性:不稳定

三、插入排序(Insertion Sort)

原理

将未排序元素插入到已排序序列的合适位置。

实现

def insertion_sort(arr):n = len(arr)for i in range(1, n):key = arr[i]j = i - 1while j >= 0 and arr[j] > key:arr[j+1] = arr[j]j -= 1arr[j+1] = key

复杂度

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)
  • 稳定性:稳定

四、归并排序(Merge Sort)

原理

采用分治思想,将序列递归分成两半,分别排序后合并。

实现

def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):result = []i = j = 0while i < len(left) and j < len(right):if left[i] <= right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1result.extend(left[i:])result.extend(right[j:])return result

复杂度

  • 时间复杂度:O(n log n)
  • 空间复杂度:O(n)
  • 稳定性:稳定

五、快速排序(Quick Sort)

原理

分治思想,选一个“基准”元素,将序列分为小于和大于基准的两部分,递归排序。

实现

def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[0]left = [x for x in arr[1:] if x < pivot]right = [x for x in arr[1:] if x >= pivot]return quick_sort(left) + [pivot] + quick_sort(right)

复杂度

  • 平均时间复杂度:O(n log n)
  • 最坏时间复杂度:O(n²)
  • 空间复杂度:O(log n) ~ O(n)
  • 稳定性:不稳定

六、希尔排序(Shell Sort)

原理

将序列按一定间隔分组,对每组进行插入排序,逐步缩小间隔,最后整体插入排序。

实现

def shell_sort(arr):n = len(arr)gap = n // 2while gap > 0:for i in range(gap, n):temp = arr[i]j = iwhile j >= gap and arr[j-gap] > temp:arr[j] = arr[j-gap]j -= gaparr[j] = tempgap //= 2

复杂度

  • 时间复杂度:O(n^1.3) ~ O(n²)(与步长序列有关)
  • 空间复杂度:O(1)
  • 稳定性:不稳定

七、堆排序(Heap Sort)

原理

利用堆这种数据结构(通常是大顶堆),每次取出堆顶元素,重建堆,直到排序完成。

实现

def heapify(arr, n, i):largest = il = 2*i + 1r = 2*i + 2if l < n and arr[l] > arr[largest]:largest = lif r < n and arr[r] > arr[largest]:largest = rif largest != i:arr[i], arr[largest] = arr[largest], arr[i]heapify(arr, n, largest)def heap_sort(arr):n = len(arr)for i in range(n//2-1, -1, -1):heapify(arr, n, i)for i in range(n-1, 0, -1):arr[0], arr[i] = arr[i], arr[0]heapify(arr, i, 0)

复杂度

  • 时间复杂度:O(n log n)
  • 空间复杂度:O(1)
  • 稳定性:不稳定

八、计数排序(Counting Sort)

原理

适用于整数且范围不大的序列。统计每个数出现的次数,然后按顺序输出。

实现

def counting_sort(arr):if not arr:return arrmin_val = min(arr)max_val = max(arr)count = [0] * (max_val - min_val + 1)for num in arr:count[num - min_val] += 1result = []for i, c in enumerate(count):result.extend([i + min_val] * c)return result

复杂度

  • 时间复杂度:O(n + k)(k为数值范围)
  • 空间复杂度:O(k)
  • 稳定性:稳定

九、常见排序算法复杂度对比表

算法最好时间最坏时间平均时间空间复杂度稳定性
冒泡排序O(n)O(n²)O(n²)O(1)稳定
选择排序O(n²)O(n²)O(n²)O(1)不稳定
插入排序O(n)O(n²)O(n²)O(1)稳定
希尔排序O(n^1.3)O(n²)O(n^1.3)O(1)不稳定
归并排序O(n log n)O(n log n)O(n log n)O(n)稳定
快速排序O(n log n)O(n²)O(n log n)O(log n)不稳定
堆排序O(n log n)O(n log n)O(n log n)O(1)不稳定
计数排序O(n+k)O(n+k)O(n+k)O(k)稳定

十、总结

  • 排序算法种类繁多,选择合适的算法要结合数据规模、数据特性和实际需求。
  • 面试和实际开发中,常用的高效排序有快速排序、归并排序、堆排序等。
  • Python 内置的 sort()sorted() 使用的是 Timsort(归并+插入的优化),时间复杂度 O(n log n),稳定且高效。

建议:

  • 小数据量用插入、冒泡等简单算法,大数据量优先考虑快排、归并、堆排序。
  • 了解每种算法的原理和适用场景,能灵活应对各种实际问题和面试考察。

如需更多算法讲解或代码实现,欢迎留言交流!

http://www.dtcms.com/a/470768.html

相关文章:

  • 医院网站需要前置审批苏州网站网络营销推广
  • 个人AI环境快速搭建
  • RAG优化实战:业务场景驱动的 Embedding 模型量化评估
  • 房地产活动策划网站电脑网站转换手机网站怎么做
  • 犀牛云网站建设怎么样做网站的心得体会
  • pc网站还有必要做吗泰安企业网站建设电话
  • 有了网站域名如何做网站多国语言网站
  • TCP中的拥塞控制
  • IP到IP间通讯
  • C 语言运算符优先级
  • dedecms网站地图前台路径不修改wordpress大学教程课件
  • 沈阳网站建设选网龙网页的网站建设在哪里
  • 科技未来网站建设哪些网站可以做电脑画画赚钱
  • 免费网站建设教程视频常州建设公司网站
  • 网站页面设计要求网站制作方案解决办法
  • GTSA中的 gtsam::StereoPoint2 类注释解读
  • 网上商城网站建设规划网站版式分类
  • 网站备案知识网页设计发展前景分析
  • 战地6正式上线发售!手机平板怎么玩战地6
  • Google 智能体设计模式:防护栏/安全模式
  • 1.Modbus读取寄存器转换为Double C#例子 WPF例子
  • 厦门网站建设培训微信网站建设流程图
  • 网站的目标定位有哪些怎样做国际网站
  • 记录一次上网b站和百度网络卡顿的情况,大约是因为1.1.1.1 dns解析的问题
  • Linux Shell 中的 $():命令替换的核心用法
  • 江苏省内网站建设北京商城网站建设报价
  • 成都私人网站建设对外贸易平台有哪些
  • 2025 年 9 月《大模型 SQL 能力排行榜》发布,新增 Kimi K2 最新版测评!
  • 外贸php网站源码网站主机类型
  • 企业网站建设流程及费用数据分析网站