C++冒泡排序算法实例
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止,这意味着数列已经排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端(或底部)。
下面是一个C++实现的冒泡排序算法实例,该实例对一个整数数组进行升序排序:
#include <iostream>
using namespace std;
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
bool swapped; // 标记某趟遍历是否发生了交换--优化算法的关键
for (int i = 0; i < n-1; i++) {
swapped = false;
for (int j = 0; j < n-i-1; j++) {
// 如果当前元素比下一个元素大,交换它们
if (arr[j] > arr[j+1]) {
swap(arr[j], arr[j+1]);
swapped = true;
}
}
// 如果某趟遍历没有发生交换,说明数组已经有序,可以提前结束
if (!swapped)
break;
}
}
// 打印数组函数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
// 主函数,用于测试冒泡排序
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
cout << "原始数组: ";
printArray(arr, n);
bubbleSort(arr, n);
cout << "排序后数组: ";
printArray(arr, n);
return 0;
}
代码解析
1.bubbleSort函数:这个函数接受一个整数数组arr和一个整数n作为参数,n是数组的长度。函数内部通过两层循环实现冒泡排序。外层循环控制遍历的轮数,内层循环负责在每一轮中进行元素间的比较和可能的交换。如果某一轮遍历中没有发生任何交换,则表明数组已经有序,可以提前结束排序。
2.swap函数:这是C++标准库中的函数,用于交换两个变量的值。这里用它来交换数组中的元素。
3.printArray函数:用于打印数组中的元素,方便查看排序前后的结果。
4.main函数:定义了待排序的数组arr,并调用bubbleSort函数对其进行排序,最后使用printArray函数打印排序前后的数组。 注意 冒泡排序的平均时间复杂度和最坏时间复杂度都是O(n^2),其中n是数组的长度。因此,对于大规模数据的排序,冒泡排序并不是一个好的选择。
##### 1.bubbleSort函数:这个函数接受一个整数数组arr和一个整数n作为参数,n是数组的长度。函数内部通过两层循环实现冒泡排序。外层循环控制遍历的轮数,内层循环负责在每一轮中进行元素间的比较和可能的交换。如果某一轮遍历中没有发生任何交换,则表明数组已经有序,可以提前结束排序。
2.swap函数:这是C++标准库中的函数,用于交换两个变量的值。这里用它来交换数组中的元素。
3.printArray函数:用于打印数组中的元素,方便查看排序前后的结果。
4.main函数:定义了待排序的数组arr,并调用bubbleSort函数对其进行排序,最后使用printArray函数打印排序前后的数组。 注意 冒泡排序的平均时间复杂度和最坏时间复杂度都是O(n^2),其中n是数组的长度。因此,对于大规模数据的排序,冒泡排序并不是一个好的选择。 尽管冒泡排序的效率不高,但其实现简单,且在某些特定情况下(如数据基本有序时)性能尚可。此外,冒泡排序是一种稳定的排序算法。尽管冒泡排序的效率不高,但其实现简单,且在某些特定情况下(如数据基本有序时)性能尚可。此外,冒泡排序是一种稳定的排序算法。