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

嵌入式C语言阶段复习——排序方法

一、冒泡排序

冒泡排序通过重复比较相邻元素并交换位置完成排序。每一轮将最大(或最小)元素“冒泡”到数组

末尾。

void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }

时间复杂度:平均和最坏情况为 O(n^2),最好情况(已排序)为 O(n)。

二、选择排序

选择排序每次遍历未排序部分,找到最小(或最大)元素,与未排序部分的起始位置交换。

void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int min_idx = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min_idx]) { min_idx = j; } } int temp = arr[min_idx]; arr[min_idx] = arr[i]; arr[i] = temp; } }

时间复杂度:始终为 O(n^2)

三、插入排序

插入排序将数组分为已排序和未排序两部分,逐个将未排序元素插入到已排序部分的正确位置。

void insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } }

时间复杂度:平均和最坏为 O(n^2),最好情况(已排序)为 O(n)

四、快速排序

快速排序采用分治策略,选择一个基准值(pivot),将数组分为小于基准和大于基准的两部分,递

归排序子数组。
实现代码:

int partition(int arr[], int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } void quickSort(int arr[], int low, int high) { if (low < high) { int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } }

时间复杂度:平均为 O(n *log n),最坏(已排序或逆序)为 O(n^2)

五、归并排序

归并排序通过递归将数组分为两半,分别排序后合并。

void merge(int arr[], int l, int m, int r) { int n1 = m - l + 1; int n2 = r - m; int L[n1], R[n2]; for (int i = 0; i < n1; i++) L[i] = arr[l + i]; for (int j = 0; j < n2; j++) R[j] = arr[m + 1 + j]; int i = 0, j = 0, k = l; while (i < n1 && j < n2) { if (L[i] <= R[j]) arr[k++] = L[i++]; else arr[k++] = R[j++]; } while (i < n1) arr[k++] = L[i++]; while (j < n2) arr[k++] = R[j++]; } void mergeSort(int arr[], int l, int r) { if (l < r) { int m = l + (r - l) / 2; mergeSort(arr, l, m); mergeSort(arr, m + 1, r); merge(arr, l, m, r); } }

时间复杂度:始终为 O(n *log n),但需要额外空间 O(n)。

六、堆排序

堆排序利用堆数据结构(完全二叉树),通过构建最大堆并交换堆顶元素实现排序。

void heapify(int arr[], int n, int i) { int largest = i; int left = 2 * i + 1; int right = 2 * i + 2; if (left < n && arr[left] > arr[largest]) largest = left; if (right < n && arr[right] > arr[largest]) largest = right; if (largest != i) { int temp = arr[i]; arr[i] = arr[largest]; arr[largest] = temp; heapify(arr, n, largest); } } void heapSort(int arr[], int n) { for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); for (int i = n - 1; i > 0; i--) { int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; heapify(arr, i, 0); } }

时间复杂度:始终为 O(n *log n)

七、总结

简单排序:冒泡、选择、插入排序适合小规模数据。

高效排序:快速、归并、堆排序适合大规模数据,快速排序通常最快。

稳定性:插入、归并排序是稳定的(相等元素顺序不变)。

http://www.jsqmd.com/news/320130/

相关文章:

  • 2026年钢纤维企业深度评测与选型指南
  • 2026年开年武汉光伏直销服务商综合选购指南
  • 2026年热门的水库大坝安全监测解决方案/水库大坝安全监测专业实力榜
  • 2026年封口机实力厂家甄选指南与案例解析
  • 2026年初如何选择优质局部放电试验装置厂家?这份深度评测给你答案
  • 三星SCX-4321打印机驱动下载:新手通用教程,快速搞定安装
  • 2026年济南派遣翻译服务市场深度解析与头部企业推荐
  • Goby 漏洞安全通告|Moltbot(Clawdbot)Gateways 未授权访问漏洞
  • 2026年温州优质反应釜供应商深度评估与选择指南
  • Goby 漏洞安全通告|SmarterMail ConnectToHub /api/v1/settings/sysadmin/connect-to-hub 命令执行漏洞(CVE-2026-24423)
  • 2026年1月南通离婚律师服务团队哪家强
  • 广告装饰制作行业分析:2026年厂家选择策略
  • 2026年靠谱的母婴选用板材/香杉实木生态板用户好评厂家排行
  • 2026年评价高的全屋定制品牌/性价比全屋定制综合实力榜
  • 2026年宜昌夷陵区优质农用器械批发服务商综合评测与选购指南
  • 若依微服务部署
  • 前后端分离大学生心理健康管理系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • SpringBoot+Vue 多媒体素材库开发与应用平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • Product Hunt 每日热榜 | 2026-01-29
  • 2026年山西工程测量服务商综合评估与推荐
  • 2026河北热风真空回流焊设备评测与选型指南
  • 2026年知名的板材/家用板材厂家推荐及选择指南
  • 2026年口碑好的装修实木板/多层实木板厂家推荐及选购参考榜
  • Gin 框架核心介绍 + 快速上手实战
  • 美食烹饪互动平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 2026年知名的仿古金属屋面/铝镁锰金属屋面热门厂家推荐榜单
  • 2026年比较好的金色仿古铝瓦/中式仿古铝瓦厂家最新用户好评榜
  • 2026年山东石榴汁生产商综合实力Top5解析
  • 2026年纯原榨石榴汁核心厂商深度选型指南
  • uniapp打包微信小程序使用插件