0
我在排序結構中的數組(動態分配)時遇到問題。首先,這個想法是按照順序排列結構中的數組i。然後我想要命令我維護的數組,而不是數組j在構造初始結構時獲得相同的「關係」。我嘗試爲第一個想法工作,但沒有任何qsort的結果。所以這是我的代碼...任何想法?我覺得在比較功能的構建中存在問題..使用C qsort()對結構中的動態數組排序()
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int M =10;
int N =30;
int K = 10;
struct element {
int *i;
int *j;
int k;
};
struct element *create_structure();
void print_element(struct element *);
int compare (const void *, const void *);
struct element * sort(struct element *);
main()
{
srand(time(NULL));
struct element *lista;
int count;
lista=create_structure();
print_element(lista);
printf("\n");
lista=sort(lista);
}
struct element *create_structure()
{
int aux1,aux2,count,load;
struct element *structure;
structure = (struct element *) malloc (M*sizeof(struct element *));
structure->k=K;
structure->i= (int *)malloc(structure->k*sizeof(int));
structure->j=(int *)malloc (structure->k*sizeof(int));
for (count = 0; count < K; count ++)
{
aux1=rand()%N;
(structure->i)[count]=aux1;
do
{
aux2=rand()%N;
}while(aux2==aux1);
(structure->j)[count]=aux2;
}
return (structure);
}
void print_element(struct element *lista)
{
int count;
for(count = 0; count < K; count ++)
{
printf("%d %d\n",lista->i[count],lista->j[count]);
}
}
int compare(const void *a, const void *b)
{
struct element *ia = (struct element *)a;
struct element *ib = (struct element *)b;
int *ptr1=(ia->i);
int *ptr2=(ib->i);
return (*ptr1-*ptr2);
}
struct element * sort(struct element *list)
{
qsort(list, sizeof(list->i)/ sizeof(int) , sizeof(list->i), compare);
//qsort(list->i, K, sizeof(list->i), compare);
print_element(list);
return (list);
}
如何使用qsort()命令結構的數組i? – Andres 2014-11-04 13:08:32
每次調用create_structure都會爲結構分配一些內存併爲成員填充值,所以如果你想這樣做,那麼你應該有鏈表來保存所有的值然後對它們進行排序 – Gopi 2014-11-04 13:24:47