冒泡排序
冒泡排序 , 它重复地遍历待排序的数列,一次比较前后两个元素,依次往后 , 如果前后元素顺序错误就把他们交换过来, 每遍历一次就会将最值一直交换到未排序数列的末尾, 反复对待排序数列进行以上操作 , 直到全部排序结束 .
这是一种易于理解切代码简单但效率不高的排序算法.
会冒泡的不止算法, 还有火锅.....
看到了火锅冒泡泡 , 再看看算法中的冒泡是怎样冒的, 演示如下:
我们再来看看详细步骤 , 还是以华安的代号 9 5 2 7为例 :
以 9 5 2 7为例 结合冒泡排序算法代码看过程图
我们发现, 冒泡算法很好理解.
冒泡算法的特点
稳定性 :稳定
时间复杂度 :O(n^2)
空间复杂度 : O(n^2)
注: 在数据量比较大时, 不建议用冒泡排序, O(n^2)的时间复杂度不适合大量数据排序
实现代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 100
void Swap(int* a, int* b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void BubbleSort(int* src, int size) {
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size - i - 1; ++j) {
if (src[j] > src[j + 1]) {
Swap(src + j, src + j + 1);
}
}
}
}
void PrintArray(int* src, int size) {
for (int i = 0; i < size; ++i) {
printf("%d ", src[i]);
}
putchar('\n');
}
int main() {
srand((unsigned int)time(0));
int src[N];
for (int i = 0; i < N; ++i) {
src[i] = rand() % N + 1;
}
printf("排序前:\n");
//PrintArray(src, N);
BubbleSort(src, N);
printf("排序后:\n");
PrintArray(src, N);
system("pause");
return 0;
}