本文主要是介绍冒泡排序(Bubble Sort):,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历待排序序列,依次比较相邻的两个元素,如果顺序不正确就交换它们,直到整个序列有序为止。
基本思想:
- 从头开始遍历待排序序列,比较相邻的两个元素,如果顺序不正确就交换它们,这样一轮遍历下来,最大的元素就会被交换到序列的末尾。
- 然后对剩下的元素(除去已经有序的部分)重复上述过程,直到整个序列有序。
-
时间复杂度:O(n^2)。
-
稳定性:稳定。
特点:
- 简单直观,易于理解和实现。
- 稳定性:冒泡排序是一种稳定的排序算法,相等元素的顺序在排序前后不会改变。
- 时间复杂度:最好情况下为O(n),最坏情况下为O(n^2),平均情况下为O(n^2)。
举例说明: 考虑待排序序列:[5, 3, 8, 4, 2]
第一轮遍历:
- 比较5和3,顺序正确,不交换,序列变为[3, 5, 8, 4, 2]
- 比较5和8,顺序正确,不交换,序列不变
- 比较8和4,顺序不正确,交换,序列变为[3, 5, 4, 8, 2]
- 比较8和2,顺序不正确,交换,序列变为[3, 5, 4, 2, 8]
第一轮遍历结束,最大的元素8已经移动到序列的末尾。接下来进行第二轮遍历,重复上述过程。
冒泡排序虽然简单,但是效率较低,特别是对于大规模数据的排序。
用C语言实现示例:
#include <stdio.h>// 冒泡排序函数
void bubbleSort(int arr[], int n) {// 外层循环控制轮数,共需要 n-1 轮for (int i = 0; i < n - 1; i++) {// 内层循环控制每一轮的比较和交换// 每一轮将当前最大的元素交换到末尾for (int j = 0; j < n - i - 1; j++) {// 如果前面的元素比后面的元素大,则交换它们if (arr[j] > arr[j + 1]) {// 交换 arr[j] 和 arr[j+1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}int main() {int arr[] = { 5, 3, 8, 4, 2 };int n = sizeof(arr) / sizeof(arr[0]);printf("原始数组:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");bubbleSort(arr, n);printf("排序后数组:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
用C++实现示例
#include <iostream>
#include <vector>// 冒泡排序函数
void bubbleSort(std::vector<int>& arr) {int n = arr.size();// 外层循环控制轮数,共需要 n-1 轮for (int i = 0; i < n - 1; i++) {// 内层循环控制每一轮的比较和交换// 每一轮将当前最大的元素交换到末尾for (int j = 0; j < n - i - 1; j++) {// 如果前面的元素比后面的元素大,则交换它们if (arr[j] > arr[j + 1]) {// 交换 arr[j] 和 arr[j+1]std::swap(arr[j], arr[j + 1]);}}}
}int main() {std::vector<int> arr = {5, 3, 8, 4, 2};std::cout << "原始数组:";for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;bubbleSort(arr);std::cout << "排序后数组:";for (int num : arr) {std::cout << num << " ";}std::cout << std::endl;return 0;
}
这篇关于冒泡排序(Bubble Sort):的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!