gpt4 book ai didi

c - 排序算法未通过

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:10:00 24 4
gpt4 key购买 nike

我正在尝试获取一个文件并通过排序算法运行它,在本例中为插入排序。在我通过算法传递它并打印数组后,它看起来没有排序。我的想法是因为我试图将数组传递给函数,并通过指针查看信息,但我认为我搞砸了。

void insertionSort(int arr[]) {
int key, j;
for(int i = 1; i < (sizeof(arr) / sizeof(int)); i++) {
int key = arr[i];
int j = i-1;
while(j >= 0 && arr[j] > key) {
arr[j+1] = arr[j];
j = j - 1;
}
arr[j+1] = key;
}
}

我将函数设置为 void,因为我认为我可以访问数组,因为它是一个指针。如果我返回数组会更好吗?我的逻辑显然是错误的,所以任何指示(没有双关语意)都会很棒。

这是来 self 的 main()

的代码块
case 2:
printf("Filling array...\n");

fp = fopen("Random.txt", "r");
if (fp == NULL) {
printf("\nError opening Random.txt\n");
exit(1);
}

for (int i = 0; i < (sizeof(arr) / sizeof(int)); i++) {
fscanf(fp, "%d", &arr[i]);
}

insertionSort(arr);

for (int i = 0; i < (sizeof(arr) / sizeof(int)); i++) {
printf("%d\n", arr[i]);
}

fclose(fp);
break;
}

最佳答案

void insertionSort(int arr[]) {

当传递给函数时,数组会衰减为指针,所以这基本上是

void insertionSort(int *arr) {

这意味着这不会给你数组中元素的数量

for(int i = 1; i < (sizeof(arr) / sizeof(int)); i++) {

您需要将数组的大小显式传递给函数。

void insertionSort(int arr[], int size) {
for (int i = 1; i < size; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}

调用函数:

insertionSort(arr, sizeof(arr) / sizeof(int));

main()中,创建数组的地方,可以使用sizeof(A)/sizeof(int),因为main() 知道数组的大小。

关于c - 排序算法未通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com