news 2026/9/3 5:37:37

嵌入式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/9/2 23:44:59

三星SCX-4321打印机驱动下载:新手通用教程,快速搞定安装

对于需要靠打印机处理文件、完成工作的用户来说&#xff0c;驱动故障就像突然断了的“桥梁”&#xff0c;让原本高效的办公节奏瞬间停滞。小编结合多年行业经验和实测数据&#xff0c;为大家整理了这份三星SCX-4321打印机驱动下载的深度指南&#xff0c;从原因解析到渠道选择&a…

作者头像 李华
网站建设 2026/9/2 21:39:49

SpringBoot+Vue web大学生一体化服务平台管理平台源码【适合毕设/课设/学习】Java+MySQL

系统架构设计### 摘要 随着信息技术的快速发展&#xff0c;高校管理服务逐渐向数字化、智能化方向转型。传统的学生服务管理模式存在效率低、信息孤岛、数据冗余等问题&#xff0c;难以满足现代高校管理的需求。大学生一体化服务平台通过整合教务、生活、社交等功能&#xff0…

作者头像 李华
网站建设 2026/9/2 21:40:18

图扑 HT 实现数字孪生智慧服务器信息安全监控平台

在数字化时代&#xff0c;服务器信息安全监控的智能化、可视化需求日益凸显。图扑软件依托自主研发的 HT for Web 技术栈&#xff0c;打造了数字孪生智慧服务器信息安全监控平台&#xff0c;无需依赖任何第三方前端插件&#xff0c;通过常规前端接口对接方案&#xff0c;实现了…

作者头像 李华
网站建设 2026/9/2 21:39:41

实测!DS File搭载cpolar后,NAS 文件远程访问竟这么简单

DS File 是群晖 NAS 的配套文件管理软件&#xff0c;主要功能包括 NAS 文件的分类存储、一键搜索、跨设备同步&#xff0c;还能联动智能家居设备查看存储的监控录像、家庭照片等&#xff0c;是管理 NAS 文件的核心工具&#xff0c;覆盖了办公文件处理和家庭数据管理的核心场景。…

作者头像 李华
网站建设 2026/9/2 20:37:15

I/ITSEC 2025:XR虚拟训练在国防部署中的应用重点

XR军事训练已经趋于常态化。现在&#xff0c;该技术正在被视为基础设施的一部分&#xff0c;部署、集成和规模预估等实际问题正在成为项目审查中的重要考虑因素。 每年12月&#xff0c;奥兰多都会成为训练和模拟的全球交汇点。I/ITSEC将国防、工业和学术界聚集在一起&#xff0…

作者头像 李华
网站建设 2026/9/2 22:06:46

免费查AI率:学术人的“防坑指南”与工具实测

凌晨两点&#xff0c;我盯着电脑屏幕上的论文重复率报告&#xff0c;后背发凉——原本以为“借鉴”了几篇文献无伤大雅&#xff0c;结果查重率飙到35%&#xff0c;导师的邮件提示音像定时炸弹般在耳边回响。这种经历&#xff0c;大概每个经历过论文季的人都懂&#xff1a;查重不…

作者头像 李华