【发布时间】:2014-12-31 09:13:07
【问题描述】:
我在对结构中的数组(动态分配)进行排序时遇到问题。首先,想法是按升序对结构中的数组 i 进行排序。然后我想订购数组 i 维护而不是数组 j 与构造初始结构时获得的相同“关系”。我尝试为第一个想法工作,但 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进行排序?
-
每次调用 create_structure 都会为你的结构分配一些内存并为成员填充值,所以如果你想这样做,那么你应该有链表来保存所有值然后对它们进行排序跨度>
标签: c arrays sorting dynamic qsort