【发布时间】:2015-06-21 15:08:46
【问题描述】:
如果我有一个数组 A 和一个数组 B,有没有办法使用 qsort() 对数组 A 进行排序,同时根据 A 的元素对 B 的所有元素进行排序?例如,如果 A = { 4, 3 ,2, 1} 和 B = {1, 2, 3, 4},那么排序后它们是这样的:
A = {1, 2, 3, 4} 和 B = {4, 3, 2, 1}
【问题讨论】:
标签: c arrays sorting quicksort qsort
如果我有一个数组 A 和一个数组 B,有没有办法使用 qsort() 对数组 A 进行排序,同时根据 A 的元素对 B 的所有元素进行排序?例如,如果 A = { 4, 3 ,2, 1} 和 B = {1, 2, 3, 4},那么排序后它们是这样的:
A = {1, 2, 3, 4} 和 B = {4, 3, 2, 1}
【问题讨论】:
标签: c arrays sorting quicksort qsort
假设问题不是duplicate,我猜你想根据它在A中排序的顺序对B进行排序。我假设A在再次排序之前已经排序。您必须提供这是否确实是一个有效的假设。
一个非常简单的解决方案可能是识别 A 中的顺序,如果 i>j 和 A[i] > A[j],你可以选择两个索引 i,j,你可以说它是升序的,否则是降序的。
然后,使用它来定义要在 B 中使用的比较函数。
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
qsort (B, sizeof(B)/sizeof(int), sizeof(int), compare);
【讨论】: