冒泡排序或起泡排序(C/C++)
代码如下:
#include<stdio.h>
//交换数值
void swap(int *p1, int *p2){//定义两个整型指针p1和p2,其中p1和p2均表示地址
int temp = *p1;//取出地址p1对应存储单元的值,并将其赋给整型变量temp
*p1 = *p2;//取出地址p2对应存储单元的值,并将其存于地址p1对应的存储单元中
*p2 = temp;//将整型变量temp的值存于地址p2对应的存储单元中
}
//对数组升序排序
void asc_sort(int num[], int n){//n表示数组的长度
for(int i = 1; i <= (n - 1); i++){//冒泡排序中要进行(n-1)轮
for(int j = 0; j < (n - i); j++){//冒泡排序中每轮要比较的次数为(n-i)次
if(num[j] > num[j+1]){//判断是否满足升序次序
swap(&num[j], &num[j+1]);//交换num[j]与num[j+1]的值
//&num[j]表示取num[j]所在存储单元的地址
}
}
}
}
//对数组降序排序
void des_sort(int num[], int n){//n表示数组的长度
for(int i = 1; i <= (n - 1); i++){//冒泡排序中要进行(n-1)轮
for(int j = 0; j < (n - i); j++){//冒泡排序中每轮要比较的次数为(n-i)次
if(num[j] < num[j+1]){//判断是否满足降序次序
swap(&num[j], &num[j+1]);//交换num[j]与num[j+1]的值
//&num[j+1]表示取num[j+1]所在存储单元的地址
}
}
}
}
//输出排序后的数组
void print(int num[], int n){//n表示数组的长度
for(int i = 0; i < n; i++){
printf("%d ", num[i]);//输出数组的第i个元素
}
printf("\n");//输出换行
}
int main(){
int num[12] = {3, 4, 7, 8, 6, 1, 2, 0, 4, 3, 9, 5};//定义长度为12的整型数组
asc_sort(num, 12);//将数组元素按升序排序
print(num, 12);//输出升序排序后的数组
des_sort(num, 12);//将数组元素按降序排序
print(num, 12);//输出降序排序后的数组
return 0;
}
运行结果如下:
参考数目如下:
[1] 严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2020:16.