gpt4 book ai didi

c - 在c中使用qsort进行排序

转载 作者:行者123 更新时间:2023-11-30 15:52:46 26 4
gpt4 key购买 nike

我有 2 个问题。一篇关于 realloc,一篇关于使用 qsort 排序。在我的以下代码中,我不断因“temp=realloc(input,(i+1)*sizeof(int));”而崩溃,但对于“i+2”一切正常。为什么? :/我将整数放入数组中,直到输入整数“<0”。然后我打印一些地址。

    #include <stdio.h>
#include <stdlib.h>

int main()
{
int *input,*temp,*f,*l;
input=malloc(sizeof(int));
int x,i,counter;
counter=0;
i=0;
while (x>=0)
{
scanf("%d",&x);
if(x<0) break;
input[i]=x;
temp=realloc(input,(i+2)*sizeof(int));
counter++;
i++;
if (temp!=NULL) input=temp;
else
{
free(input);
printf("Error allocating memory!\n");
return 1;
}
}
for(i=0; i<counter; i++) printf("Input: %d",input[i]);
printf("table address: %p",&input);
printf("first element address: %p",&input[0]);
printf("last element address: %p",&input[counter-1]);
}

关于使用 qsort 对此数组进行排序。我在“cplusplus.com”中找到了此代码作为示例:

    /* qsort example */
#include <stdio.h>
#include <stdlib.h>

int values[] = { 40, 10, 100, 90, 20, 25 };

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

int main ()
{
int n;
qsort (values, 6, sizeof(int), compare);
for (n=0; n<6; n++)
printf ("%d ",values[n]);
return 0;
}

我无法理解指针 a 和 b 是如何连接到示例的数组的。如果我想使用不同的排序算法,或者从大到小排序,我应该更改“return ( (int)a - (int)b );”?提前致谢!

最佳答案

  1. 您不应在此处使用realloc。你知道表格的大小是多少,它是x。因此,使用 malloc 分配长度为 x 的第一个表。另外,for 循环在这里更合适,而不是 while。只是风格上的改进。

  2. 是的,您更改了该部分,它应该是 ( *(int*)b - *(int*)a ) 从大到小排序。

    <

关于c - 在c中使用qsort进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172746/

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