冒泡排序
课上练习
知识总结
冒泡排序-知识总结
冒泡排序-知识总结 解决问题 对一组线性存储的数据进行排序。
核心思想 冒泡排序通过不断重复比较相邻元素的大小关系,将书序错误的元素进行交换,从而实现排序。是使用了贪心法的排序算法。
工作原理 原理介绍 初始化:标记已排序部分为空 ①从第一个元素开始遍历未排序元素 A.逐对比较相邻元素大小 B.交换顺序错误的两个元素 ②更新已排序部分 重复①②至所有元素都已排序
代码模板
1// 从小到大排序
2#include <bits/stdc++.h>
3using namespace std;
4
5int arr[1005] = {};
6
7int main() {
8 int n;
9 cin >> n;
10 for (int i = 0; i < n; ++i) {
11 cin >> arr[i];
12 }
13 for (int i = 0; i < n - 1; ++i) {
14 bool flag = true;
15 for (int j = 0; j < n - 1 - i; ++j) {
16 if (arr[j] > arr[j + 1]) {
17 swap(arr[j], arr[j + 1]);
18 flag = false;
19 }
20 }
21 if (flag) {
22 break;
23 }
24 }
25 for (int i = 0; i < n; ++i) {
26 cout << arr[i] << (i + 1 == n ? "\n" : " ");
27 }
28 return 0;
29}
30// 从大到小排序
31#include <bits/stdc++.h>
32using namespace std;
33
34int arr[1005] = {};
35
36int main() {
37 int n;
38 cin >> n;
39 for (int i = 0; i < n; ++i) {
40 cin >> arr[i];
41 }
42 for (int i = 0; i < n - 1; ++i) {
43 bool flag = true;
44 for (int j = 0; j < n - 1 - i; ++j) {
45 if (arr[j] < arr[j + 1]) {
46 swap(arr[j], arr[j + 1]);
47 flag = false;
48 }
49 }
50 if (flag) {
51 break;
52 }
53 }
54 for (int i = 0; i < n; ++i) {
55 cout << arr[i] << (i + 1 == n ? "\n" : " ");
56 }
57 return 0;
58}算法评价 时间复杂度:O(n^2) 空间复杂度:O(n^2) 稳定性:稳定排序
️课后作业
☝️总结作业
总结作业非常重要,请务必认真完成✔️
- 冒泡排序使用了哪种算法思想?
- 冒泡排序的核心思想是什么?
- 简单介绍冒泡排序的工作原理。
- 1s的时间内选冒泡序可以处理的数据规模最大是多少?
✌️编程作业
考试只有一次提交机会,请务必本地检查正确后再提交❇️
👌编程作业标准答案
请在AC后或者思考15分钟没有进展后查看,不可抄代码❇️
L2153题解+参考代码
L2153题解+参考代码 题目链接 奇数单增序列:L2153
题解 我们需要从给定的正整数序列中取出所有奇数,并按升序排序后输出。可以使用冒泡排序来实现排序。
算法步骤 读取输入:读取整数 n 和接下来的 n 个整数。 提取奇数:遍历输入的整数序列,提取所有奇数并存储在数组中。 使用冒泡排序对奇数数组进行排序。 输出结果:按升序输出排序后的奇数序列,用逗号间隔。 示例代码 这里是使用 C++ 实现的示例代码:
1#include <bits/stdc++.h>
2using namespace std;
3
4int main() {
5 // 读取输入
6 int n;
7 cin >> n;
8 int nums[500];
9 int oddNumbers[500];
10 int oddCount = 0;
11
12 for (int i = 0; i < n; ++i) {
13 cin >> nums[i];
14 if (nums[i] % 2 != 0) {
15 oddNumbers[oddCount++] = nums[i];
16 }
17 }
18
19 // 使用冒泡排序对奇数数组进行排序
20 for (int i = 0; i < oddCount - 1; ++i) {
21 for (int j = 0; j < oddCount - 1 - i; ++j) {
22 if (oddNumbers[j] > oddNumbers[j + 1]) {
23 swap(oddNumbers[j], oddNumbers[j + 1]);
24 }
25 }
26 }
27
28 // 输出结果
29 for (int i = 0; i < oddCount; ++i) {
30 if (i > 0) {
31 cout << ",";
32 }
33 cout << oddNumbers[i];
34 }
35 cout << endl;
36
37 return 0;
38}L2154题解+参考代码
L2154题解+参考代码 题目链接 日期排序:L2154
题解 我们需要对输入的日期按从早到晚排序。可以使用冒泡排序来实现这个功能。在排序过程中,我们需要将日期转换为便于比较的格式(如年月日),然后再进行比较和排序。
算法步骤 读取输入:读取整数 n 和接下来的 n 个日期。 转换日期格式:将日期从字符串格式转换为便于比较的数值格式(如年月日)。 使用冒泡排序对日期进行排序: 在比较时,将年月日作为一个整体进行比较。 输出结果:按从早到晚的顺序输出排序后的日期。 示例代码 这里是使用 C++ 实现的示例代码:
1#include <bits/stdc++.h>
2using namespace std;
3
4// 将日期转换为数值,便于比较
5int convertToDateValue(const string& date) {
6 int month = stoi(date.substr(0, 2));
7 int day = stoi(date.substr(3, 2));
8 int year = stoi(date.substr(6, 4));
9 return year * 10000 + month * 100 + day;
10}
11
12int main() {
13 // 读取输入
14 int n;
15 cin >> n;
16 string dates[1000];
17 for (int i = 0; i < n; ++i) {
18 cin >> dates[i];
19 }
20
21 // 使用冒泡排序对日期进行排序
22 for (int i = 0; i < n - 1; ++i) {
23 for (int j = 0; j < n - 1 - i; ++j) {
24 if (convertToDateValue(dates[j]) > convertToDateValue(dates[j + 1])) {
25 swap(dates[j], dates[j + 1]);
26 }
27 }
28 }
29
30 // 输出结果
31 for (int i = 0; i < n; ++i) {
32 cout << dates[i] << endl;
33 }
34
35 return 0;
36}