我正在尝试使用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()的输出
非常感谢任何帮助/建议。
答案 0 :(得分:3)
qsort
没有返回任何内容,它只是就地对阵列进行排序。原型开头的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.
答案 1 :(得分:1)
在默认的qsort函数中返回void,因此您使用以下代码
qsort(a,size,sizeof(int),cmpfunc);
printf("\nAfter sorting the list is: \n");
for( i = 0 ; i < size; i++ ) {
printf("%d ", a[i]);
}