C中的数组QSORT?

时间:2011-11-13 22:41:23

标签: c arrays sorting

如果我有这样的数组:

2, 4, 6, 0, 0, 0, 0, 0, 0
  1. 有没有办法可以通过排序前3个元素来使用qsort,而其余部分保持不变?
  2. qsort(arrNumbers, 3, sizeof(int), compare)会做这个工作吗?
  3. 指定低于完整数组的元素数量是否只会导致该元素数量被排序?
  4. 编辑: 我的比较功能是:

    int comp(const int * a, const int * b)
       if(a==b)
       {
           return 0;
       }
       else
       {
          if(a<b)
          {
             return -1;
           }
           else
           {
             return 1;
           }
        }
    

    看起来是对的吗?

4 个答案:

答案 0 :(得分:7)

*

<小时/> *假设您正确定义compare()

答案 1 :(得分:2)

为什么不尝试一下,看看它是否按预期工作?

说明:qsort函数只获取数组的指针,但没有说明数组的长度。这就是你必须传递大小的原因。在函数调用中,您声称数组的长度为int长,并且所有qsort函数都可以确定。它不会访问超出该限制的任何内容。

答案 2 :(得分:2)

完整的签名是:

void qsort(
   void * base,
   size_t num,
   size_t width,
   int (__cdecl *compare )(const void *, const void *) 
);

要对数组的特定连续范围进行排序,只需传入一个不同的base(指向该范围的起始元素的指针)和num(元素数)在范围内。)

答案 3 :(得分:1)

是的,如果你在你的情况下指定3,它只会对前3个元素进行排序。