我正在尝试实现一种气泡排序算法,但有 3 个函数,一个gen_array生成数组,给定值的大小和最大值,以及一个排序以气泡排序方式对值进行排序。我无法让排序部分工作。但是,gen_array函数正在做它应该做的事情,当我调用它并在 main(( 上打印其值时工作。
这是代码。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int gen_array(int ** list, int size, int max) {
*list = (int *)malloc(size * sizeof(int));
if (*list == NULL){
printf("ERROR: out of memoryn");
return 1;
}
srand( (unsigned)time( NULL ) );
for (int i = 0; i < size; ++i) {
(*list)[i] = rand() % max;
}
return 0;
}
int sort(int * a, int s) {
int *temp;
for (int i = 1; i < s; ++i) {
for (int j = 0; j < i - 1; ++j) {
if (*(a + i) > *(a + i + 1)) {
*(a + i) = temp;
*(a + i) = *(a + i + 1);
*(a + i + 1) = temp;
}
}
}
return 0;
}
int main() {
int size;
printf("array Size --> ");
scanf("%d", &size);
int * a;
gen_array(&a ,size, 100);
for (int i = 0; i < size; ++i) {
printf("%d ", a[i]);
}
printf("n");
sort(a, size);
for (int j = 0; j < size; ++j) {
printf("%d", a[j]);
}
free(a);
getchar();
return 0;
}
在关注@mch的评论后,我得到了这个输出,
阵列大小 --> 5
1 4 46 4 51
1 4 4 0 0
进程已完成,退出代码为 0
因此,该列表由 5 个元素生成,但是排序部分不起作用,我相信排序代码是正确的(气泡算法(,但指针没有正确使用?也许我应该使用 realloc(( 复制数组的内容?
代码中有几个有问题的错误。
首先,温度应该是int
的,而不是int*
的。请记住,a
是指向堆中数组开头的指针。 *(a + i)
是该数组的第i
个元素的值。
其次,温度应该设置为*(a + i)
,而不是相反。
此外,正如Weather Vane在评论中指出的那样,循环是错误的。您需要检查数组元素j
和j + 1
,而不是i
。作为其中的一部分,还需要进行一些其他更改,但您可以在下面看到这些更改。
这是具有这些更改的排序方法(我认为其余的都可以,除了您需要在第二次列出项目时添加空格(:
int sort(int *a, int s) {
int temp;
for (int i = 0; i < s; ++i) {
for (int j = 0; j < s - i - 1; ++j) {
if (*(a + j) > *(a + j + 1)) {
temp = *(a + j);
*(a + j) = *(a + j + 1);
*(a + j + 1) = temp;
}
}
}
return 0;
}