2015-11-20 71 views
2

我有這樣的結構:快速排序與結構的指針的指針

typedef struct arvDado Arv; 
struct arvDado{ 
    char c; 
    int qtd; 
    Arv* dir; 
    Arv* esq; 
}; 

,我做這個結構的指針的數組:

Arv** vetArv = (Arv**)malloc(sizeof(Arv*)*qtd); 

我想打一個快速排序,但我認爲我的comper功能不工作...

comper function: 
int comparaCelula(const void *x, const void *y){ 
    Arv *a=(Arv*)x, *b=(Arv*)y; 
    printf(" %d x %d",a->qtd,b->qtd); 
    if(a->qtd == b->qtd) return 0; 
    if(a->qtd < b->qtd) return -1; 
    if(a->qtd > b->qtd) return 1; 
} 

對於任何情況下你想看到我的執行qsort是這樣的:

陣列的點的ARV = ARV ** vetCell獸醫= QTD /尺寸結構ARV /康珀功能

qsort(vetCel, qtd, sizeof(Arv*), comparaCelula); 
+0

以怎樣的方式是不工作?你會得到什麼輸入/輸出? – EkcenierK

+0

你分配一個'Arv *'數組。我沒有看到你在任何地方初始化陣列。 –

回答

4

的/大小的qsort比較功能被給予所述元件的地址陣列中。由於你的數組是一個指針數組,所以你得到了指向指針的指針。所以,這條線:

Arv *a=(Arv*)x, *b=(Arv*)y; 

應該是:

Arv *a=*((Arv**)x), *b=*((Arv**)y); 

因爲x和y指針的指針抗逆轉錄病毒(ARV **)

+0

tks男人,這真的幫助我 –