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 }

 

你可能感兴趣的:(sort)