33,321
社区成员




//对结构体一级排序
struct In
{
double data;
int other;
}s[100]
//按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写
int cmp( const void *a ,const void *b)
{
return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;
}
qsort(s,100,sizeof(s[0]),cmp);
#include <stdio.h>
#include <stdlib.h>
struct node
{
int x;
int y;
}node[4]={{4, 0}, {6, 0}, {1, 0}, {5, 0}};
int compare(const void *ele1, const void *ele2)
{
struct node *px, *py;
px = (struct node *)ele1;
py = (struct node *)ele2;
if(px->x < py->x) //主要是这块的处理!!!!!!!!!!!!!!!!!!!!!!!
return 1;
else
return 0;
}
void main(void)
{
int i;
qsort(node, 4, sizeof(struct node), compare);
for(i=0; i<4; i++)
printf("{%d, %d}, ", node[i].x, node[i].y);
}
第四个参数是一个函数指针,其中的参数是数组中两个元素的地址值(不用你管),你需要自己写一下比较函数,通过改变其返回值可进行从小到大或从大到小进行排序