演示 冒泡法排序 算法
注意,较为简陋
#include<stdio.h> //使用冒泡排序进行从小到大排序
int main() {
int i = 0, j = 0, k = 0, l = 0;
int i_Number[101] = { 0 };
int i_Temp = 0, i_How_Many_Num = 0;
scanf("%d", &i_How_Many_Num);//此处应该加判断 输入需要比较多少数字
for (i = 1; i <= i_How_Many_Num; i++) {//此处应该加判断 录入数据
scanf("%d", &i_Number[i]);
}
for (j = 1; j <= i_How_Many_Num - 1; j++) {//控制共需要多少次比较 因为是两个两个比较 所以-1
for (k = 1; k <= i_How_Many_Num - j; k++) {//控制当前比较数字
if (i_Number[k]>i_Number[k+1]) {//如果前一个数大于后面一个数 则互换
//互换开始
i_Temp = i_Number[k];
i_Number[k] = i_Number[k + 1];
i_Number[k + 1] = i_Temp;
}
}
}
for (l = 1; l <= i_How_Many_Num; l++) {
printf("%d\t", i_Number[l]);
}
}
运行截图:
%E6%BC%94%E7%A4%BA%20%E5%86%92%E6%B3%A1%E6%B3%95%E6%8E%92%E5%BA%8F%20%E7%AE%97%E6%B3%95.assets/1803860671.png注意:一开始误认为冒泡法排序方法是选择法排序请不要混淆!
其他版本:(注意,此版本较容易混淆,不推荐使用)
涂黄处为变动
#include<stdio.h> //使用冒泡排序进行从小到大排序
int main() {
int i = 0, j = 0, k = 0, l = 0;
int i_Number[101] = { 0 };
int i_Temp = 0, i_How_Many_Num = 0, i_Flag = 0;
scanf("%d", &i_How_Many_Num);//此处应该加判断 输入需要比较多少数字
for (i = 1; i <= i_How_Many_Num; i++) {//此处应该加判断 录入数据
scanf("%d", &i_Number[i]);
}
i_Flag = i_How_Many_Num;
for (j = 1; j <= i_How_Many_Num - 1; j++) {//控制共需要多少次比较 因为是两个两个比较 所以-1
i_Flag--;
for (k = 1; k <= i_Flag; k++) {//控制当前比较数字
if (i_Number[k]>i_Number[k+1]) {//如果前一个数大于后面一个数 则互换
//互换开始
i_Temp = i_Number[k];
i_Number[k] = i_Number[k + 1];
i_Number[k + 1] = i_Temp;
}
}
}
for (l = 1; l <= i_How_Many_Num; l++) {
printf("%d\t", i_Number[l]);
}
}
注意:“i_Flag--;”代码位置很关键,容易出错!