目录
前言
排序是重要又较为简单的算法之一,个人认为学习算法建议先学习排序,排序有十种重要的排序方法,有些好,有些坏。
十大排序算法包括哪些
十大排序算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。
今天我来讲讲冒泡排序。
冒泡排序原理
冒泡排序的核心思想是通过重复地遍历待排序的序列,比较每对相邻元素的大小。如果前一个元素比后一个元素大,则交换这两个元素的位置。这个过程会一直进行,直到没有需要交换的元素为止。
冒泡排序基本信息
英文名 | bubble sort |
时间复杂度 | O(n^2) |
空间复杂度 | O(1) |
是否稳定 | 是 |
代码实现
代码思路
- 从序列的第一个元素开始,比较相邻的两个元素。
- 如果前一个元素大于后一个元素,则交换它们的位置。
- 继续下一对相邻元素的比较,直到序列的末尾。
- 重复上述步骤,直到整个序列有序排列。
代码实现
/*头文件部分*/
#include <iostream>
#include <algorithm>
using namespace std;
/*冒泡排序部分*/
void bubble_Sort() {
int a[100001], n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n - i; j++)
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
/*输出数组部分*/
for (int i = 1; i <= n; i++)
cout << "第" << i << "个数:" << a[i] << endl;
}
/*主函数部分*/
int main() {
bubble_Sort();
return 0;
}
实例
【模板】排序
题目描述
将读入的 N 个数从小到大排序后输出。
输入格式
第一行为一个正整数 N。
第二行包含 N 个空格隔开的正整数 ai,为你需要进行排序的数。
输出格式
将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。
样例1
样例输入1
5
4 2 4 5 1
样例输出1
1 2 4 4 5
本题来自洛谷题目
P1177 【模板】排序https://www.luogu.com.cn/problem/P1177
代码
#include <iostream>
#include <algorithm>
using namespace std;
void bubble_Sort() {
int a[100001], n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n - i; j++)
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
for (int i = 1; i <= n; i++)
cout << a[i] << " ";
cout << endl;
}
int main() {
bubble_Sort();
return 0;
}
总结
冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是通过重复遍历待排序的数列,比较相邻元素并在必要时交换它们的位置,直到数列完全有序。冒泡排序的时间复杂度为O(n^2),适用于数据量较小的情况。
冒泡排序的工作原理
冒泡排序通过重复遍历待排序的数列,比较每对相邻元素的大小。如果它们的顺序错误(例如,从小到大排序时前一个元素大于后一个元素),则交换它们的位置。这个过程会重复进行,直到没有需要交换的元素为止,表示数列已经排序完成。
冒泡排序的步骤
- 比较相邻的元素:从数列的第一个元素开始,比较相邻的两个数。
- 交换元素:如果前一个数比后一个数大,则交换它们的位置。
- 继续遍历:继续这个过程,直到数列的末尾。
- 重复操作:重复上述步骤,直到整个数列有序。
冒泡排序的时间复杂度和空间复杂度
- 时间复杂度:冒泡排序的时间复杂度为O(n^2),在数据量较大时效率较低。
- 空间复杂度:冒泡排序是原地排序算法,空间复杂度为O(1)。
冒泡排序的优缺点
- 优点:实现简单,容易理解;对于小数据量的排序非常高效。
- 缺点:效率较低,不适合处理大数据量的排序问题。
冒泡排序的应用场景
尽管冒泡排序效率较低,但它适用于数据量较小且对时间要求不高的场景,例如:
- 小数据量的排序操作。
- 算法教学和演示。
你学废了吗?
下期预告:十大排序算法之希尔排序