冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历待排序的列表,比较每对相邻的项目,并在必要时交换它们。该算法的名字来源于较小的元素会逐渐“冒泡”到列表的顶端。
基本原理
冒泡排序算法的基本思想是:比较相邻的两个元素,如果第一个比第二个大(对于递增排序),就交换它们的位置。然后,对下一对相邻元素做同样的工作,以此类推,直到没有再需要交换的元素为止,这意味着该列表已经排序完成。
C++实现
下面是一个简单的C++冒泡排序算法实现,该实现将数组按照递增顺序进行排序。
#include <iostream>
// 函数原型声明
void bubbleSort(int arr[], int n);
void printArray(int arr[], int size);
void swap(int *xp, int *yp);
// 主函数
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
std::cout << "Sorted array: \n";
printArray(arr, 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])
swap(&arr[j], &arr[j+1]);
}
// 打印数组函数
void printArray(int arr[], int size) {
for (int i=0; i < size; i++)
std::cout << arr[i] << " ";
std::cout << std::endl;
}
// 交换两个元素的函数
void swap(int *xp, int *yp) {
int temp = *xp;
*xp = *yp;
*yp = temp;
}
代码解析
函数声明:
bubbleSort:用于执行冒泡排序。printArray:用于打印数组。swap:用于交换两个整数的值。
主函数:
- 创建一个整数数组
arr。 - 计算数组的大小
n。 - 调用
bubbleSort函数对数组进行排序。 - 调用
printArray函数打印排序后的数组。
- 创建一个整数数组
冒泡排序函数:
- 外层循环遍历数组的所有元素。
- 内层循环遍历数组中尚未排序的部分,比较相邻元素。
- 如果当前元素比下一个元素大,则交换它们的位置。
打印数组函数:
- 遍历数组,打印每个元素。
交换函数:
- 交换两个整数的值。
冒泡排序的特点
- 简单易懂:冒泡排序算法易于理解,实现起来也比较简单。
- 效率较低:冒泡排序的平均和最坏情况时间复杂度都是O(n^2),因此它不是最高效的排序算法。
- 稳定性:冒泡排序是一种稳定的排序算法,相同值的元素会保持原有的顺序。
通过上述代码,你可以轻松掌握C++中冒泡排序算法的实现。尽管它不是最高效的排序方法,但作为一个基础示例,它对于学习和理解排序算法的工作原理非常有帮助。
