冒泡排序是C语言中常见的排序部分,也是C语言不论是期末考试还是计算机二级都有可能考到的点,我尽量以一个菜鸟的想法(我本身就是菜鸟)讲一下冒泡排序(仅限基础),如有错误,欢迎批评指正!
以下代码由AI生成:(升序)
#include <stdio.h>
// 定义冒泡排序函数
void bubbleSort(float arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
float temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
float arr[10];
int n = sizeof(arr) / sizeof(arr[0]);
printf("请输入十个浮点数:\n");
for (int i = 0; i < n; i++) {
scanf("%f", &arr[i]);
}
printf("排序前的数组:\n");
for (int i = 0; i < n; i++) {
printf("%.1f ", arr[i]);
}
bubbleSort(arr, n);
printf("\n排序后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%.1f ", arr[i]);
}
return 0;
}
只看代码不好理解,首先对函数部分进行解析:
1.函数的参数表部分,arr是一个浮点数数组变量,是我们要排序的对象;n是arr内元素的个数,一般会在主函数部分给出。
2.(注意for部分可能会报错,事实上是AI生成的代码直接在for内定义了,把for(int i=0;...)部分改为int i;for(i=0;...)即可)i=0,i<n-1是对除了最后一个数之外的数组元素进行遍历;j<n-i+1是保证不对已经排序的元素进行重复遍历。
这里举例讲解一下:
整数数组{5,3,8,4,2}
用上述函数进行冒泡排序(&表示元素发生交换,分先后顺序)
①5 & 3 8 & 4 & 3 2→3 5 4 2 8
②3 5 & 4 & 2 8→ 3 4 2 5 8
③3 4 & 2 5 8→3 2 4 5 8
④3 & 2 4 5 8→2 3 4 5 8
实际上这就是函数部分进行时的过程,其中temp用的是中间变量,你们交换数应该也用过,这里不再赘述。
注意一点:这里的函数没有return ,所以函数声明应该用void,int main(void)
主函数部分:
这里没什么可说的,基本就是使用函数,数组遍历然后输出 。
注意:n=sizeof(arr)/ sizeof(arr[0])实际上表示arr内元素的个数,sizeof表示该变量(元素)所占的字节数。
好了,基础的冒泡排序就是这些了,C语言博大精深,我们还有很长的路要走。
最后以翁凯老师的几句话收尾:
计算机的所有东西都是人做出来的,别人能想的出来的,我也一定想的出来。在计算机里头没有任何黑魔法,所有的东西只是我现在不知道而已。
与君共勉。