C语言实现冒泡排序:升序排序详细解析

8 下载量 30 浏览量 更新于2024-09-02 收藏 543KB PDF 举报
"C语言冒泡排序法的实现(升序排序法)" 在计算机科学中,排序算法是处理数据集合的基础工具,冒泡排序是一种简单的排序算法,它重复地遍历待排序的列表,依次比较相邻的元素,如果顺序错误就把它们交换过来。这个过程就像水底下的气泡一样逐渐上升到水面,因此得名“冒泡排序”。本篇将详细介绍如何在C语言中实现冒泡排序法,以升序进行排序。 首先,我们来看一个用于整数排序的示例代码: ```c #include<stdio.h> #define SIZE 10 int main() { int a[SIZE] = {12, 43, 9, 13, 67, 98, 101, 89, 3, 35}; // 十个数的无序数列 int i, j, t; printf("此程序使用冒泡排序法排列无序数列!\n"); // 冒泡排序 for (i = 0; i < 10 - 1; i++) // n个数的数列总共扫描n-1次 { for (j = 0; j < 10 - i - 1; j++) // 每一趟扫描到a[n-i-2]与a[n-i-1]比较为止结束 { if (a[j] > a[j + 1]) // 后一位数比前一位数小的话,就交换两个数的位置(升序) { t = a[j + 1]; a[j + 1] = a[j]; a[j] = t; } } } printf("排列好的数列是:\n"); // 输出排列好的数列 for (i = 0; i < 10; i++) { printf("%d", a[i]); } return 0; } ``` 这段代码中,`main()` 函数首先定义了一个包含10个整数的数组,并使用冒泡排序法对其进行升序排序。外层的 `for` 循环控制整个排序过程,而内层的 `for` 循环负责每一轮的比较和交换。在每一轮中,比较相邻的元素,如果前一个元素大于后一个元素,则交换它们的位置。这个过程会持续到数组完全排序。 接着,我们有一个处理字符排序的示例: ```c #include<stdio.h> #define SIZE 10 int main() { char a[SIZE] = {'i', 'l', 'o', 'v', 'e', 'y', 'o', 'u', 'y', 'x'}; // 十个数的无序字符数组 int i, j; printf("此程序使用冒泡排序法排列无序字符组!\n"); // 冒泡排序 for (i = 0; i < 10 - 1; i++) // n个数的数列总共扫描n-1次 { for (j = 0; j < 10 - i - 1; j++) // 每一趟扫描到a[n-i-2]与a[n-i-1]比较为止结束 { if (a[j] > a[j + 1]) // 字符的ASCII值比较 { char t = a[j + 1]; a[j + 1] = a[j]; a[j] = t; } } } printf("排列好的字符组是:\n"); // 输出排列好的字符组 for (i = 0; i < 10; i++) { printf("%c", a[i]); } return 0; } ``` 这里的逻辑与整数排序相同,只是比较的是字符的ASCII值。因为字符也是通过ASCII码进行存储的,所以可以根据ASCII值大小进行比较。 此外,还可以将冒泡排序功能封装成一个独立的函数,以提高代码的可复用性: ```c #include<stdio.h> void bubble_sort(int arr[], int size) { int i, j, t; for (i = 0; i < size - 1; i++) { for (j = 0; j < size - i - 1; j++) { if (arr[j] > arr[j + 1]) { t = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = t; } } } } int main() { int a[SIZE] = {12, 43, 9, 13, 67, 98, 101, 89, 3, 35}; int i; printf("此程序使用冒泡排序法排列无序数列!\n"); bubble_sort(a, SIZE); printf("排列好的数列是:\n"); for (i = 0; i < SIZE; i++) { printf("%d", a[i]); } return 0; } ``` 这样,你可以将排序逻辑与主程序分离,使得代码更易于理解和维护。冒泡排序虽然效率相对较低(时间复杂度为O(n^2)),但对于小规模数据的排序,它仍是一个实用的解决方案。在实际应用中,如果需要处理大量数据,通常会选择更高效的排序算法,如快速排序、归并排序等。