【发布时间】:2018-12-01 10:07:48
【问题描述】:
我正在尝试获取一个文件并通过排序算法运行它,在这种情况下是插入排序。在我通过算法并打印数组后,它看起来没有排序。我的想法是因为我试图将数组传递给函数,并通过指针查看信息,但我认为我搞砸了。
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 因为我认为我可以访问数组,因为它是一个指针。如果我返回数组会更好吗?我的逻辑显然是错误的,所以任何指针(不是双关语)都会很棒。
这是我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;
}
【问题讨论】:
-
提示 1:
void insertionSort(int arr[]) {与void insertionSort(int *arr) {完全相同(是的,即使你写 [] 也是一个指针)。提示 2:sizeof(int*)/sizeof(int)是什么? -
insertionSort例程中的sizeof(arr)将是sizeof(int*),即 8 个字节,因此您实际在做的是8 / 4,即 2 -
@immibis 我正在使用
sizeof来遍历整个数组。我的印象是我不能使用.length()例如因为 C 不是 OOP? @0.sh 阅读上面的评论。使用sizeof遍历数组。如果有更好的方法,我愿意接受。 -
sizeof(arr) / sizeof(int) = 2on x86_64 和1on x86。 -
@InfoSecNick 除了
arr(在函数中)不是数组。
标签: c arrays algorithm sorting pointers