news 2026/4/16 13:32:31

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式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)

七、总结

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

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 7:21:32

Product Hunt 每日热榜 | 2026-01-29

1. DataFast 标语&#xff1a;“以收入为导向的分析” 介绍&#xff1a;了解哪些营销渠道能吸引客户&#xff0c;从而快速推动你的业务增长。 产品网站&#xff1a; 立即访问 Product Hunt&#xff1a; View on Product Hunt 关键词&#xff1a;数据分析, 营收优先, 市场渠…

作者头像 李华
网站建设 2026/4/16 10:17:51

AI开发平台的“三化”融合与场景落地新范式

站在2025年展望2026&#xff0c;AI技术的演进正深刻塑造着AI开发平台的形态与使命。单一功能的工具将迅速被淘汰&#xff0c;平台之争将聚焦于“三化”融合的深度。理解这一趋势&#xff0c;是做好2026年AI开发平台怎么选的前提&#xff0c;也将重新定义AI应用如何落地的范式。…

作者头像 李华
网站建设 2026/4/8 13:41:15

性价比高的新能源线全功能处理机生产厂家

在新能源汽车、储能系统及充电设施产业高速发展的当下&#xff0c;新能源线束作为能量传输与信号控制的“血管”&#xff0c;其加工质量直接关系到终端产品的性能与安全。新能源线全功能处理机作为线束加工的核心装备&#xff0c;其选择至关重要。如何在保证高性能与高可靠性的…

作者头像 李华
网站建设 2026/4/16 10:18:53

适合初创公司的顶级域名后缀介绍

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

作者头像 李华
网站建设 2026/3/31 9:17:30

水质重金属在线监测仪:守护水环境的精准监测利器

水质重金属在线监测仪是一种用于连续、自动监测水体中重金属含量的仪器设备&#xff0c;在环境监测、水质安全保障等领域发挥着重要作用。一、工作原理 1.电化学传感技术&#xff1a;阳极溶出法是其常见的原理之一&#xff0c;通过工作电极施加电压&#xff0c;使重金属离子在电…

作者头像 李华
网站建设 2026/4/13 10:19:12

安防监控平台EasyCVR油田油井智能监管应用实践

随着油气勘探开发向深层、偏远区域延伸&#xff0c;油田油区呈现出油水井点多面广、管网纵横交错、作业环境复杂等显著特征。传统监控模式已难以适配安全生产、高效运维的核心需求。随着工业物联网与智能视频分析技术的成熟&#xff0c;构建一个统一、智能的远程视频监控平台成…

作者头像 李华