gpt4 book ai didi

c - 将 C 中内置的 sort() 函数的值分配给另一个数组

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:30 25 4
gpt4 key购买 nike

我正在尝试使用 C 中内置的 qsort() 函数对数组进行排序。下面是我写的代码

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

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

int main(void) {
int size,i;
printf("Enter the size of strings:\n");
scanf("%d", &size);

int a[size],identity[size];

printf("***********************************************************\n");
printf("Enter the first string:\n");
for(i=0;i<size;i++)
scanf("%d", &a[i]);


printf("Before sorting A is: \n");
for( i = 0 ; i < size; i++ ) {
printf("%d ", a[i]);
}

identity = qsort(a, size, sizeof(int), cmpfunc);

printf("\nAfter sorting the list is: \n");
for( i = 0 ; i < size; i++ ) {
printf("%d ", identity[i]);
}


return 0;
}

由于我来自 Python 编程实践,我不明白如何让名为 identity 的数组保存排序数组 a 的值,我认为这是 qsort() 的输出

非常感谢任何帮助/建议。

最佳答案

qsort 没有返回任何内容,它只是就地对数组进行排序。原型(prototype)开头的 void 返回类型指定缺少返回值:

void qsort(void *arr, size_t num, size_t sz, int (*fn)(const void*, const void*));

因此你称它为:

qsort (a, size, sizeof(int), cmpfunc);

“返回值”是数组a本身,根据你传入的参数排序。

这意味着你最后没有原始数组,除非你先复制它。如果您真的需要一个新的排序数组(这很不寻常),您可以使用类似的东西:

int *identity = malloc (size * sizeof(int));
if (identity == NULL)
complainBitterlyAndExit();
memcpy (identity, a, size * sizeof(int));
qsort (identity, size, sizeof(int), cmpfunc);

// Now have original a and sorted identity.
// Need to free (identity) at some point.

关于c - 将 C 中内置的 sort() 函数的值分配给另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517610/

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