c - C中的数组排序

标签 c arrays sorting

我不是 C 专家,我已经通读了论坛,但我仍然需要一些关于 C 排序问题的建议。

我在 C 中有 4 个 double 动态数组。它们的大小都相同,假设为 n。我想要做的是使用其中一个数组作为第一顺序,使用第二个数组作为我的第二顺序对所有这些进行排序。因此,如果数组是 *x、*y、*w 和 *z。我想根据 *x 的值对它们进行排序,然后是 *y。

我必须高效地执行此操作,因为数组非常大。

任何帮助将不胜感激。

最佳答案

执行此操作的简单方法是将四个单独的数组映射到一个结构类型的数组,例如

struct rec {
  double x;
  double y;
  double w;
  double z;
};

struct rec *arr = malloc( sizeof *arr * N ); // where N is the number of
                                             // elements in each array

if ( !arr )
  // malloc failed, handle error somehow

for ( size_t i = 0; i < N; i++ )
{
  arr[i].x = x[i];
  arr[i].y = y[i];
  arr[i].w = w[i];
  arr[i].z = z[i];
}

然后创建一个比较函数传递给qsort:

int cmpRec( const void *lhs, const void *rhs )
{
  struct rec *l = lhs;
  struct rec *r = rhs;

  if ( l->x < r->x )
    return -1;
  else if ( l->x > r->x )
    return 1;
  else
  {
    if ( l->y < r->y )
      return -1;
    else if ( l->y > r->y )
      return 1;
    else
      return 0;
  }

  return 0;
}

现在您可以使用qsort 库函数对该结构数组进行排序:

qsort( arr, N, sizeof *arr, cmpRec );

对该数组排序后,您可以将结果映射回您的四个原始数组。

关于c - C中的数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23115268/

相关文章:

php - Postgres 多数组

java - 迭代快速排序方法

c - 使用递归算法反转链表

c - fgets()中的标识符错误

C(嵌入式): Giving source file unique ID's

delphi - 为什么我的TStringList不排序

c++ - 选择排序数组

c++ - gdb 远程调试缓存远程目标

javascript - React Native - 动态图像源

c - 从指针打印数组,只打印第一个元素