目录
在 C 语言的学习和实际编程应用中,排序算法是一项基础且重要的技能。今天,我们就来探讨如何使用 C 语言对输入的十个数进行排序,这里将以经典的冒泡排序算法为例展开探讨。
一、常见排序算法简介
排序算法有很多种,如冒泡排序、选择排序、插入排序、快速排序、归并排序等 。不同的排序算法在时间复杂度、空间复杂度和稳定性等方面各有特点。其中,冒泡排序是一种简单直观的排序算法,特别适合初学者入门学习。
二、冒泡排序算法原理
冒泡排序的基本思想是重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢 “浮” 到数列的顶端,就如同水中的气泡向上漂浮一样。
在对长度为 n 的数组进行排序时,冒泡排序需要进行 n - 1 轮比较。每一轮比较都会将当前未排序部分中最大(或最小)的元素 “沉” 到末尾。例如,对于一个包含 10 个数的数组,第一轮比较需要比较 9 次,将最大的数放到数组的最后一个位置;第二轮比较需要比较 8 次,将第二大的数放到倒数第二个位置,以此类推,直到整个数组有序。
三、C 语言实现代码
-
#include <stdio.h> // 交换两个数的函数 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp;} // 冒泡排序函数 void bubbleSort(int arr[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) {swap(&arr[j], &arr[j + 1]);} } } } // 打印数组的函数 void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) printf("%d ", arr[i]); printf("\n"); } int main() { int arr[10]; int i; printf("请输入十个整数:\n"); for (i = 0; i < 10; i++) { scanf("%d", &arr[i]); } int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); printf("排序后的数组为:\n"); printArray(arr, n); return 0; }
在上述代码中:
- swap函数用于交换两个整数的值,通过指针操作实现数据交换。
- bubbleSort函数实现了冒泡排序算法,外层循环控制排序的轮数,内层循环用于每一轮比较和交换元素。
- printArray函数用于打印数组元素,方便查看排序前后的数组内容。
- 在main函数中,首先接收用户输入的十个整数,然后调用bubbleSort函数进行排序,最后调用printArray函数输出排序后的数组。
四、运行示例与结果分析
假设我们输入的十个整数为:5 3 8 6 2 9 1 7 4 0 。运行程序后,输出结果为:0 1 2 3 4 5 6 7 8 9 。可以看到,程序成功地对输入的十个数进行了升序排序。
冒泡排序的时间复杂度在最坏情况下为 O (n²),在最好情况下(数组已经有序)为 O (n),空间复杂度为 O (1) 。虽然冒泡排序效率相对较低,但它简单易懂,对于理解排序算法的基本思想和 C 语言数组操作非常有帮助。
通过本文的介绍,相信你已经掌握了使用 C 语言和冒泡排序算法对十个数进行排序的方法。后续可以进一步学习其他更高效的排序算法,提升编程能力。
若对代码还有疑问,或文章哪里有问题,欢迎指正。