深入理解 C 语言中的排序算法:冒泡排序与选择排序
冒泡排序和选择排序都是基础的排序算法,它们的时间复杂度在最坏和平均情况下都为 O (n²),空间复杂度为 O (1)。虽然在面对大规模数据时效率较低,但对于理解排序算法的基本思想和编程实现非常有帮助。在实际应用中,我们可以根据具体需求选择更高效的排序算法,如快速排序、归并排序等。希望本文能帮助你更好地理解和掌握 C 语言中的排序算法,为进一步的编程学习打下坚实基础。
引言
排序是计算机科学中最基础且重要的操作之一。在 C 语言编程领域,掌握常见的排序算法对于优化程序性能、处理大量数据等有着关键作用。本文将详细介绍两种简单且经典的排序算法 —— 冒泡排序和选择排序,并通过 C 语言代码实现它们。
冒泡排序
算法原理
冒泡排序(Bubble Sort)是一种简单的比较排序算法。它重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,直到没有要交换的数据元素为止。这个过程就如同气泡在水中上升,较大的元素会逐渐 “浮” 到数列的末尾,因此得名。
C 语言代码实现
#include <stdio.h>
// 函数声明
void bubbleSort(int arr[], int n);
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
bubbleSort(arr, n);
printf("排序后的数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 冒泡排序函数定义
void bubbleSort(int arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
// 最后i个元素已经有序,所以内循环范围逐渐减小
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换arr[j]和arr[j + 1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
代码分析
在上述代码中,bubbleSort函数接受一个整数数组arr和数组的长度n作为参数。外层循环控制排序的轮数,一共需要n - 1轮。内层循环负责在每一轮中比较相邻的元素并进行交换。在每一轮结束后,最大的元素就会 “沉” 到数组的末尾。通过这样的方式,经过多轮比较和交换,整个数组就会有序。
选择排序
算法原理
选择排序(Selection Sort)也是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
C 语言代码实现
#include <stdio.h>
// 函数声明
void selectionSort(int arr[], int n);
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
selectionSort(arr, n);
printf("排序后的数组: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 选择排序函数定义
void selectionSort(int arr[], int n) {
int i, j, min_index;
for (i = 0; i < n - 1; i++) {
min_index = i;
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[min_index]) {
min_index = j;
}
}
if (min_index!= i) {
// 交换arr[i]和arr[min_index]
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
}
}
代码分析
selectionSort函数同样接受一个整数数组arr和数组长度n。外层循环控制选择的轮数,一共需要n - 1轮。在内层循环中,首先将当前外层循环的索引i设为最小元素的索引min_index,然后从i + 1位置开始遍历数组,找到最小元素的真实索引min_index。如果找到的最小元素索引不是当前的i,则交换这两个位置的元素。这样每一轮都能确定一个最小元素并放置在正确位置,最终完成整个数组的排序。
总结
冒泡排序和选择排序都是基础的排序算法,它们的时间复杂度在最坏和平均情况下都为 O (n²),空间复杂度为 O (1)。虽然在面对大规模数据时效率较低,但对于理解排序算法的基本思想和编程实现非常有帮助。在实际应用中,我们可以根据具体需求选择更高效的排序算法,如快速排序、归并排序等。希望本文能帮助你更好地理解和掌握 C 语言中的排序算法,为进一步的编程学习打下坚实基础。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)