qsort

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 
 5 
 6 int a[10]={1,9,5,6,7,4,1,5,8,3};
 7 typedef struct
 8 {
 9     double x;
10     double y;
11 }b;
12 //一维数组的排序(整形)
13 int comp(const void *p,const void *q)
14 {
15     return *(int *)p>*(int *)q ? 1:-1;//从小到大
16 
17     /*   return  -(*(int *)p-*(int *)q);//从大到小
18            return *(int *)p>*(int *)q ? 1:-1;//从小到大
19     */
20 }
21 //一维数组的排序(double型的要注意了)
22 
23 
24 double in[100]; 
25 
26 int cmp( const void *a , const void *b ) 
27 { 
28     return *(double *)a > *(double *)b ? 1 : -1; //直接返回的话可能会有浮点误差,造成错误的判断
29 }
30 
31 int cmp1(const void *p,const void *q)
32 {
33     return (*(b*)p).x>(*(b*)q).x?1:-1;
34 
35 }
36 //按照x从小到大排序,当x相等时按照y从大到小排序
37 int cmp2(const void *p,const void *q)
38 {
39     b *c=(b*)p;
40     b *d=(b*)q;
41     if(c->x!=d->x)  return c->x>d->x?1:-1;
42     else return d->y>c->y?1:-1;
43 }
44 
45 
46 int cmp3(const void *p,const void *q)
47 {
48         return strcmp((*(Node *)p).str,(*(Node *)q).str);
49 }
50 
51 int main()
52 {
53     int i;
54     /*qsort(a,10,sizeof(int),comp);
55     for(i=0;i<10;i++)
56         printf("%d ",a[i]);*/
57     b t[5];
58     t[0].x=0;
59     t[0].y=4;
60     t[1].x=0;
61     t[1].y=0;
62     t[2].x=5;
63     t[2].y=8;
64     t[3].x=5;
65     t[3].y=1;
66     t[4].x=2;
67     t[4].y=7;
68     qsort(t,5,sizeof(b),cmp2);
69     for(i=0;i<5;i++)
70         printf("%.0lf %.0lf\n",t[i].x,t[i].y)    ;
71     
72 
73     return 0;
74 }

 

posted @ 2012-12-15 09:35  萧凡客  阅读(224)  评论(0编辑  收藏  举报