2011-11-13 38 views
0

如果我有一个这样的数组:在C中的数组QSORT?

 
2, 4, 6, 0, 0, 0, 0, 0, 0 
  1. 有没有一种方法,我可以通过排序只是第3个元素,而保留其余不变的qsort使用?
  2. qsort(arrNumbers, 3, sizeof(int), compare)会做这份工作吗?
  3. 确定低于完整数组的元素数量是否仅导致要排序的元素数量?

编辑: 我比较功能是:

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

它看起来对吗?

+6

这里有一个新颖的想法:把它放在C程序中,看看会发生什么! –

+1

[manpage](http://www.opengroup.org/sud/sud1/xsh/qsort.htm)是什么意思? – sehe

+0

你试过了吗?它应该工作,并且不难尝试。 – leo

回答

1

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

7

是的。

是的。 *

是的。


*假设您适当地定义了compare()

+0

这是一个伟大的(病态)警告! – sehe

2

为什么你不试试看,它看起来像你期望的那样工作?

说明:qsort功能只得到一个指针到阵列中,不说数组有多长。这就是为什么你必须通过这个尺寸。在你的函数调用中,你声称这个数组是三个长为int,这就是所有的qsort函数都可以确定的。它不会访问超出此限制的任何内容。

2

完整签名是:

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

要排序的特定连续范围阵列的,你就在不同的base传递(指针于范围起动元件)和num(元素数目在范围中)。