gpt4 book ai didi

c - 插入排序什么都不做

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:30 25 4
gpt4 key购买 nike

我昨天写了下面的插入排序(我是3天前开始学C的)。出于某种原因,排序不会修改数组AT ALL

#include <stdio.h>
int *insert(int arr[], int index, int item);
int *isort(int arr[]);
int main() {
int a[17] = {1, 2, 9, 5, 3, 2, 1, 6, 5, 9, 0, 1, 3, 4, 2, 3, 4};
int *b = isort(a);
for (int i = 0; i < 17; i += 1) {
printf("%d ", b[i]);
}
return 0;
}
int *insert(int arr[], int index, int item) {
--index;
while (index >= 0 && item < arr[index]) {
arr[index + 1] = arr[index];
--index;
}
arr[index + 1] = item;
return arr;
}
int *isort(int arr[]) {
for (int i = 1; i < sizeof(arr) - 1; i++) {
arr = insert(arr, i, arr[i]);
}
return arr;
}

我认为它可能是我的编译器,因为我正在运行非 unix 机器上的编译器:lcc-win,但我不确定。我在这里缺少一些基本的东西吗?

最佳答案

int *isort(int arr[]) {
for (int i = 1; i < sizeof(arr) - 1; i++) {
arr = insert(arr, i, arr[i]);
}
return arr;
}

在这个函数中,sizeof(arr) 实际上返回指针的大小,而不是数组的大小。

在 C 语言中有一个特殊的规则,数组参数实际上被调整为相应指针类型的参数。

即:

int *isort(int arr[]) { /* ... */ }

等同于:

int *isort(int *arr) { /* ... */ }

要解决此问题,请在您的函数中添加一个采用数组大小​​的新参数:

int *isort(int arr[], size_t size) { /* ... */ }

关于c - 插入排序什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11960484/

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