2011-11-13 41 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(元素數目在範圍中)。