【问题标题】:my book's implementation of insertion sort in C [closed]我的书在 C 中实现插入排序 [关闭]
【发布时间】:2016-07-18 16:22:02
【问题描述】:

我想确切地知道第三个参数应该是什么,因为我从未见过类似的东西。

void sortPointers(void **ar, int n, int (*cmp)(const void *, const void *))
{
    int j;
    for (j = 1; j < n; j++)
    {
        int i = j - 1;
        int *value = ar[j];
        while (i >= 0 && cmp(ar[i], value) > 0)
        {
            ar[i+1] = ar[i];
            i--;
        }
        ar[i+1] = value;
    }
}

【问题讨论】:

  • 这是一个函数指针。现在你应该知道要研究什么了。
  • 第三个参数是一个(指向a的)比较函数,它接受两个元素进行排序并比较它们。如果元素是有序的,则给出一个负数(或在相等的情况下为 0)。如果元素的顺序错误,则给出肯定的结果,它们将被交换。也就是说,它的输出应该类似于strcmp
  • 结帐qsort documentation。它具有 cmp 作为参数,用于相同目的。
  • void** 呃哦...@zac 你能提供那本书的标题,或者更好的是,显示排序函数的实际调用方式吗?
  • 这是一个函数的地址,它将比较两个元素以执行排序。该功能可能是您实现的功能,也可能是为您提供的其他功能。该功能必须符合所示的原型。

标签: c implementation insertion-sort


【解决方案1】:

那个参数是指向一个比较两个 void* 指针的函数的指针。 sortPointers(..) 函数的这种实现方式使其调用者可以使用任何比较函数,从而增加了灵活性。

http://c.learncodethehardway.org/book/ex18.html

【讨论】:

  • “两个 void* 指针的比较” - 错误。它用于比较这些指针指向的任何泛型类型的两个对象。
  • @EugeneSh.Resmy 是正确的。那些 void 指针可能指向不同的类型也是正确的。
猜你喜欢
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
相关资源
最近更新 更多