C语言 冒泡排序的小bug
正常的:#include <stdio.h>
void show(int array[], int length);
void show(int array[], int length){
int temp, i, j;
for(i = 0; i < length; i++){
for(j = 0; j < length; j++){
if(array > array){
temp = array;
array = array;
array = temp;
}
}
}
}
int main(void){
int array[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int length = sizeof(array) / sizeof(array);
show(array, length);
int i;
printf("排序结果是:");
for(i = 0; i < length; i++){
printf("%d ", array);
}
putchar('\n');
return 0;
}
正常的结果:
❯ gcc test.c && ./a.out
排序结果是:1 2 3 4 5 6 7 8 9
bug:数组第一个元素给了10;
#include <stdio.h>
void show(int array[], int length);
void show(int array[], int length){
int temp, i, j;
for(i = 0; i < length; i++){
for(j = 0; j < length; j++){
if(array > array){
temp = array;
array = array;
array = temp;
}
}
}
}
int main(void){
int array[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int length = sizeof(array) / sizeof(array);
show(array, length);
int i;
printf("排序结果是:");
for(i = 0; i < length; i++){
printf("%d ", array);
}
putchar('\n');
return 0;
}
❯ gcc test.c && ./a.out
排序结果是:-1525677937 1 2 3 4 5 6 7 8 9
zsh: abort ./a.out
这是为什么? 这个问题的原因在于冒泡排序函数中的代码有一些错误。我来帮你修复一下。
首先,冒泡排序的基本思想是对数组进行多次遍历,并将相邻两个元素进行比较和交换,使得整个数组逐渐变得有序。所以在你的冒泡排序函数中,我们需要将数组的元素类型声明为int类型的指针,而不是int类型。修改后的函数声明如下:
void show(int *array, int length);
在循环过程中,需要通过指针操作数组的元素。所以在比较和交换元素时,需要使用指针进行操作。代码中的比较操作`if(array > array)`也是错误的,应该使用指针进行比较。同时,在交换元素时,也需要通过指针进行交换。
修改后的冒泡排序函数代码如下:
void show(int *array, int length){
int temp, i, j;
for(i = 0; i < length; i++){
for(j = 0; j < length; j++){
if(array > array){
temp = array;
array = array;
array = temp;
}
}
}
}
最后,在`main`函数中,声明数组的方式也有问题。应该使用大括号`{}`来初始化数组,而不是圆括号`()`。同时,在计算数组长度时,应该除以每个元素占用的字节数,而不是除以指针的字节数。修改后的`main`函数代码如下:
int main(void){
int array[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int length = sizeof(array) / sizeof(array);
show(array, length);
int i;
printf("排序结果是:");
for(i = 0; i < length; i++){
printf("%d ", array);
}
putchar('\n');
return 0;
}
现在再编译和运行程序,你应该能够得到正确的排序结果。希望能对你有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]