高效排序法

在stdlib.h里 
qsort(a, n, sizoef(int), cmp) ;
这样一句就排好了
第一个参数是需要排序的指针,一般为数组类型,我们这儿传进去的是e; 第二个参数是进行排序的元素个数,由于我们只初始化了10个,所以传10; 第三个参数是每个元素的大小,所以我们传进去sizeof(expo); 第四个参数是比较的逻辑,是一个函数指针,我们传进去修改后的cmp;

# include <stdio.h>
# include <stdlib.h>


int cmp1(const void *a, const void *b)
{
int aa = *(int*)a , bb = *(int*)b ;
return aa - bb ;
}


int cmp2(const void *a, const void *b)
{
int aa = *(int*)a , bb = *(int*)b ;
if (aa < 0) aa = -aa ;
if (bb < 0) bb = -bb ;
return aa - bb ;
}


int main ()
{
int a[5] = {1, 2, -1, -2, 0} ;
int i ;


qsort (a, 5, sizeof(int), cmp1) ;
for (i = 0 ; i < 5 ; i++)
printf ("M", a[i]) ;
printf ("\n") ;

qsort (a, 5, sizeof(int), cmp2) ;
for (i = 0 ; i < 5 ; i++)
printf ("M", a[i]) ;
printf ("\n") ;

return 0 ;
}


除了 return aa - bb ;

其他都是固定写法
不用管为什么
aa是
aa是a元素的值 bb是b元素的值
我返回的是aa - bb
是什么意思呢



如果aa < bb 返回的是一个负数
如果aa == bb 返回的是0
如果aa > bb 返回的是一个正数
这就是比较函数的意思
比较函数cmp用于返回两个元素的大小关系

如果第一个元素小于第二个元素 返回负数
如果两个元素相同 返回0
如果第一个元素大于第二个元素 返回正数

但是。。。也没体现降序排列啊

如果你想反过来
你就返回bb-aa啊
原文地址:https://www.cnblogs.com/chaosheng/p/2329607.html