我希望能够将一个
int *arr
按降序排序,并在同一时间内,如果 int *arr
的第二个元素大于第一个元素,则交换相应的 char **words
数组元素。我该如何使用 qsort()
和 cmpfunc()
来实现这一点?排序 ints
很容易,但是如何交换另一个数组中的字符串,因为我没有索引知道 int 数组中哪两个元素目前已排序?qsort(arr,N,sizeof(int),cmpfunc);
``
int cmpfunc(const void * a, const void * b) {
int val1 = *(int *)a;
int val2 = *(int *)b;
if(val2 > val1) {
/* swap string positions */
return 1;
} else if(val2 < val1) {
return -1;
} else {
return 0;
}
}
arr
在cmpfunc
中可用(例如,因为它是文件作用域的变量),那么您可以推导出索引;但这当然是一种hack方法。 - Stephan Lechnerstruct obj { int count; char *word; };
,然后创建一个由N个这样的结构体组成的数组,并将该数组作为基础传递给qsort? - Stelios Papamichail