冒泡排序的算法思想可以参考王道数据结构的书,建议先看书或者通过B站学习相关课程了解算法思想后再看代码。
代码:
//如果代码中要使用到scanf,要把第一行代码加上,我这里是直接从写过的代码中复制过来的
#define _CRT_SECURE_NO_WARNINGS 1
#define ElemType int
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct {
ElemType* elem;
ElemType len;
}SSTable;
//初始化待排序数组
void ST_Init(SSTable& ST, ElemType len) {
ST.len = len;
ST.elem = (ElemType*)malloc(sizeof(ElemType) * ST.len);
srand(time(NULL));
for (int i = 0; i < ST.len; i++) {
ST.elem[i] = rand() % 100;
}
}
//交换函数
void swap(ElemType& a, ElemType& b) {
ElemType temp = 0;
temp = a;
a = b;
b = temp;
}
//冒泡排序算法
void BubbleSort(SSTable& ST) {
for (int i = 0; i < ST.len-1; i++) {
bool flag = true;
for (int j = ST.len - 1; j >i; j--) {
if (ST.elem[j] < ST.elem[j - 1]) {
swap(ST.elem[j], ST.elem[j - 1]);
flag = false;
}
}
//如果一轮比较都没有元素交换位置说明已经有序
if (flag) {
return;
}
}
}
void print(SSTable ST) {
for (int i = 0; i < ST.len; i++) {
printf("%d ", ST.elem[i]);
}
printf("\n");
}
int main() {
SSTable ST;
ST_Init(ST, 10);
print(ST);
BubbleSort(ST);
print(ST);
return 0;
}
每次生成随机数进行排序,当然读者可以自己输入待排序的数据或者将数据固定下来。
如果想最后的结果按照逆序输出,可以修改打印函数,或者对冒泡算法进行修改。 打印函数的修改可以参考快速排序的文章,快速排序。对于冒泡排序算法的修改更为简单,直接把冒泡排序中的if条件判断的小于号改为大于号即可。
运行结果截图:
如果内容对你有帮助,关注我,给我点个小小的赞吧!
若内容有误,请指正并多多包容,谢谢。