冒泡排序算法是模仿水中气泡上浮过程而创造的排序算法。其基本思想是:从第一个数开始,依次比较相邻的两个数,将小数(或大数)放在前面,将大数(或小数)放在后面。经过一轮比较后,最大(或最小)的数将位于最后一个位置。然后继续重复这些步骤,直到所有数都排列完成。代码如下。
#include <bits/stdc++.h>
using namespace std;
int *create_rand_arr() {
/*生成随机整数数组指针函数*/
int length = 10; // 定义长度为10
srand(time(0)); // 设置时间种子
int *rand_arr = new int [length];
for (int i = 0; i < length; i++) {
rand_arr[i] = rand() % (100 - -100 + 1) + -100; // 将随机数填充进数组指针中
}
return rand_arr;
}
int get_length(int *arr) {
/*获取数组指针的长度*/
return _msize(arr) / sizeof(*arr);
}
void bubble_sort(int *arr) {
/*冒泡排序函数(递减)*/
int k, l, length = get_length(arr);
for (int i = length - 1, m = 1; i >= 0; i--, m++) {
for (int j = 0; j < i; j++) {
if (arr[j + 1] > arr[j]) {
k = arr[j + 1];
l = arr[j];
arr[j + 1] = l;
arr[j] = k;
}
}
/*
// 输出调试结果
printf("第 %d 次排序后的结果; ", m);
for (int n = 0; n < length; n++) {
cout << arr[n] << " ";
}
cout << endl;
*/
}
}
int main() {
int *arr = create_rand_arr(); // 制作随机整数数组
int length = get_length(arr); // 获取长度
// 输出原数组
cout << "原数组: ";
for (int i = 0; i < 10; i++) {
cout << arr[i] << " ";
}
cout << endl;
// 使用冒泡排序函数进行排序
bubble_sort(arr);
// 输出新数组
cout << "新数组: ";
for (int i = 0; i < 10; i++) {
cout << arr[i] << " ";
}
return 0;
}
运行结果如下。
冒泡排序算法的平均时间复杂度为 O ( n 2 ) O(n^2) O(n2),最坏时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为 O ( 1 ) O(1) O(1)。