在 Objective-C 中实施 qsort

Implementing qsort in Objective-C

我正在尝试使用 qsort 根据 this website 的建议按降序对 C 数组进行排序。

相关代码如下:

int x = 3;

- (IBAction)CaptureButton:(id)sender
{
  x++;
  if (x % 3 == 1) 
  {

  int areas[detectedBlobs.size()];

  for (int i = 0; i < detectedBlobs.size(); i++)
  {
      areas[i] = detectedBlobs[i].getWidth() * detectedBlobs[i].getHeight();
  }

  int compareInts(void const *item1, void const *item2)
  { // first error
      int const *int1 = item1;
      int const *int2 = item2;
      return (*int2 - *int1);
  }

  qsort(areas, detectedBlobs.size(), sizeof(int), compareInts); // second error
  }
}

这是我遇到的两个错误:

第一个错误:

Function definition is not allowed here

第二个错误:

Use of undeclared identifier 'compareInts'

如果我不能在这里定义比较器(compareInts)函数,我必须在哪里定义它?另外,如何让 qsort 函数识别比较器?

Objective-C 不允许在方法内部定义函数。将 compareInts 移到方法之外,并使其 static 对其他翻译单元隐藏:

static int compareInts(const void* item1, const void* item2) {
    const int* int1 = (const int*)item1;
    const int* int2 = (const int*)item2;
    return (*int2 - *int1);
}

- (IBAction)CaptureButton:(id)sender {
    x++;
    if (x % 3 == 1) {
        int areas[detectedBlobs.size()];
        for (int i = 0; i < detectedBlobs.size(); i++) {
            areas[i] = detectedBlobs[i].getWidth() * detectedBlobs[i].getHeight();
        }
        qsort(areas, detectedBlobs.size(), sizeof(int), compareInts);
    }
}