您现在的位置是:首页 >学无止境 >C语言实现冒泡排序(附带源码)网站首页学无止境
C语言实现冒泡排序(附带源码)
简介C语言实现冒泡排序(附带源码)
C语言实现冒泡排序
项目介绍
冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复遍历待排序的序列,比较相邻元素,如果它们的顺序错误就交换它们的位置。遍历过程每一轮都将当前未排序部分的最大元素“冒泡”到序列的末端,因此得名“冒泡排序”。这种排序算法简单易懂,但在大量数据时效率较低,时间复杂度为O(n²),适合于小规模的数据排序。
本项目的目标是使用C语言实现冒泡排序,提供一个简单的示例代码,展示如何进行冒泡排序操作,包括数组的初始化、排序和结果输出。
冒泡排序的基本思想
- 从头到尾遍历数组,比较相邻的两个元素。
- 交换位置:如果前一个元素大于后一个元素,就交换它们的位置。
- 重复遍历:每次遍历都会将当前未排序部分的最大元素移动到末尾。
- 优化:如果某一轮遍历没有发生交换,说明数组已经是有序的,可以提前终止排序。
项目实现思路
- 外层循环:遍历数组
n-1
次,每次都将未排序部分的最大元素移动到数组末尾。 - 内层循环:从数组的头部开始,比较相邻的元素,如果前一个元素大于后一个元素,则交换它们的位置。
- 提前退出优化:如果某次遍历中没有交换任何元素,说明数组已经有序,可以提前结束排序。
代码结构
bubbleSort
:实现冒泡排序算法。printArray
:打印数组的内容,用于显示排序前后的结果。main
:主函数,用于输入数据并调用排序函数。
代码实现
#include <stdio.h>
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
int i, j, temp;
int swapped; // 用来检测一轮遍历是否发生了交换
// 外层循环,控制排序的轮数
for (i = 0; i < n - 1; i++) {
swapped = 0; // 假设当前一轮没有发生交换
// 内层循环,进行相邻元素的比较和交换
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换相邻元素
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = 1; // 如果发生了交换,设置swapped为1
}
}
// 如果一轮遍历没有发生交换,说明数组已排好序,可以提前退出
if (!swapped) {
break;
}
}
}
// 打印数组的函数
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("
");
}
// 主函数,测试冒泡排序
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]); // 计算数组的长度
printf("排序前的数组:
");
printArray(arr, n); // 打印排序前的数组
bubbleSort(arr, n); // 调用冒泡排序函数
printf("排序后的数组:
");
printArray(arr, n); // 打印排序后的数组
return 0;
}
代码解读
-
bubbleSort
函数:- 输入参数:一个整数数组
arr
和数组的大小n
。 - 外层循环:遍历
n-1
次,保证所有元素都能被排序。 - 内层循环:从数组的第一个元素开始,比较相邻的两个元素。如果前一个元素大于后一个元素,就交换它们的位置。每次内层循环结束时,当前未排序部分的最大元素会被“冒泡”到数组的末尾。
- 提前退出优化:如果在某一轮遍历中没有发生交换,说明数组已经有序,直接跳出外层循环,避免不必要的遍历。
- 输入参数:一个整数数组
-
printArray
函数:- 遍历数组并打印每个元素,输出数组的内容。
-
main
函数:- 定义一个示例数组
arr
,计算数组的大小,并在排序前后分别调用printArray
函数打印数组。 - 调用
bubbleSort
函数对数组进行排序。
- 定义一个示例数组
示例输出
排序前的数组:
64 34 25 12 22 11 90
排序后的数组:
11 12 22 25 34 64 90
项目总结
本项目实现了一个简单的冒泡排序算法,能够将一个整数数组按升序排列。冒泡排序的时间复杂度为O(n²),因此它在面对较大数据集时效率较低。但是由于其简单易懂,仍然在小数据量的排序中广泛使用。
通过实现冒泡排序,我们深入理解了排序算法的基本思想和算法的优化策略——提前退出。当数组已经是有序的时,可以避免不必要的排序操作,从而提高算法的性能。虽然冒泡排序在大规模数据排序中效率较差,但它仍然是学习其他复杂排序算法的基础。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。