|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#define NUMBER 5
int main(void)
{
int i;
int v[NUMBER];
printf("请输入%d人的身高。\n",NUMBER);
for (i = 0;i < NUMBER;i++){
printf("%d号:",i+1);
scanf("%d",&v[i]);
}
puts("按升序排列。");
for (i = NUMBER;i > 0;i--){
if (v[i] < v[i-1]){
int swap;
swap = v[i-1];
v[i-1] = v[i];
v[i] = swap;
}
}
for (i = 0;i < NUMBER - 1;i++)
printf("%d号:%d\n",i+1,v[i]);
return 0;
}
请问这个冒泡排序错在哪里了呀?
这段代码中的排序算法并不是冒泡排序,而是一种错误的排序算法。冒泡排序的核心思想是通过相邻元素的比较和交换来实现排序。以下是对这段代码进行修正的冒泡排序算法:
- #include <stdio.h>
- #define NUMBER 5
- int main(void)
- {
- int i;
- int v[NUMBER];
- printf("请输入%d人的身高。\n", NUMBER);
- for (i = 0; i < NUMBER; i++) {
- printf("%d号:", i + 1);
- scanf("%d", &v[ i]);
- }
- puts("按升序排列。");
- for (i = 0; i < NUMBER - 1; i++) {
- for (int j = 0; j < NUMBER - i - 1; j++) {
- if (v[j] > v[j + 1]) {
- int swap = v[j];
- v[j] = v[j + 1];
- v[j + 1] = swap;
- }
- }
- }
- for (i = 0; i < NUMBER; i++)
- printf("%d号:%d\n", i + 1, v[ i]);
- return 0;
- }
复制代码
修正后的代码使用了嵌套循环,在每一轮外层循环中,内层循环通过比较相邻元素的大小来进行交换,将较大的元素逐渐移动到数组的末尾。这样,经过多轮的比较和交换,最终实现了升序排序。
请注意,修正后的代码中的内层循环条件是 j < NUMBER - i - 1 ,这是因为每一轮外层循环都会将当前最大的元素移动到数组的末尾,所以下一轮内层循环时可以不再考虑已经排序好的部分。
|
|