gpt4 book ai didi

arrays - 堆内存中的数组排序

转载 作者:行者123 更新时间:2023-11-30 16:41:19 25 4
gpt4 key购买 nike

我必须编写一个函数来对堆中的数组进行排序。该函数应该创建数组的副本,对副本进行排序,并返回指向已排序副本的指针。我尝试了 qsort() 但得到了奇怪的输出。我确信它与指针有关,但仍然无法弄清楚。

这是我到目前为止的代码:

int cmpfunc(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b);
}

int sorted_copy(int* list[], size_t s)
{
int aList[s];
memcpy(aList,list,s);
printf("Array was copied successfuly to aList[] array\n\n");
printf("Before sorting the list is: \n");

for(int i = 0; i < s; i++)
printf("%d\n", aList[i]);

qsort(aList, s, sizeof(int), cmpfunc);
printf("After sorting the list is: \n");
for(int i = 0; i < s; i++)
{
printf("%d\n", aList[i]);
}
return *aList;
}

int main()
{
int list[10] = {4, 1, 2, 7, 3, 5, 6, 0, 8, 9};
sorted_copy(list,sizeof(list));
return 0;
}

这是我得到的输出

    Array was copied successfuly to aList[] array

Before sorting the list is:
4
1
2
7
3
5
6
0
8
9
0
0
0
0
3
0
0
0
268501009
32762
4199840
0
-1407817721
32762
12846904
0
1324151619
0
8
0
176
0
6487584
0
4199972
0
4200528
0
-1434081178
32762
After sorting the list is:
-1434081178
-1407817721
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
2
3
3
4
5
6
7
8
8
9
176
32762
32762
32762
4199840
4199972
4200528
6487584
12846904
268501009
1324151619

Process returned 0 (0x0) execution time : 0.281 s
Press any key to continue.

最佳答案

好吧,sorted_copy() 的第二个参数必须是作为第一个参数传递的数组元素的数量,而不是它的 sizeof (内存字节)我假设您使用的是 32 位架构,其中 int 是四个字节宽,并且您将 40 作为元素的数组数量传递,而不是10 这是数组中的实际单元数。

改变

int main()
{
/* you don't need to specify the number of elements to declare
* the array if you are using an initializer that fully populates
* the array elements */
int list[10] = {4, 1, 2, 7, 3, 5, 6, 0, 8, 9};
sorted_copy(list,sizeof(list)); /* sizeof gives you the array
* size in bytes, not in number
* of elements */
return 0;
}

进入

int main()
{
int list[] = {4, 1, 2, 7, 3, 5, 6, 0, 8, 9};
sorted_copy(list, sizeof list / sizeof list[0]);
return 0;
}

你会得到正确的结果。

关于arrays - 堆内存中的数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290622/

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