在之前阅读网上排序的代码时,当时有一段地方看不懂,就是一个排序函数,有三个参数列表,数组名,长度,还有一个"compare"
今天突然想到,排序过程中,是否进行交换(选择排序为例)是判断是否两个的大小关系,满足。
可是以往都是讲排序默认成,升序,或者降序,如果出现另外的条件(字符串大小,长度等等)又改怎么办,这就引入了sort第三个参数列表,compare,这是一个函数指针,指向实参传来的函数地址,函数指针作为形式参数。
对于他的理解,参考C语言的指针部分,就是在程序子块,函数被编译后,为它分配一段存储地址,他的函数名就和数组名差不多,代表一个地址。函数名的形参可以理解成指向函数的指针(指向函数的指针格式是 类型(*函数名)(参数列表)例如(*compare)(int ,int ))
**
#include<stdio.h>
int shengxu(int x,int y)
{
if(x<=y) return 0;
else return 1;
}
int jiangxu(int x,int y)
{
if(x>=y) return 0;
else return 1;
}
void sort(int *number,int N,int (*compare)(int ,int ))
{
int i,k,j,t;
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
{
if(compare(number[i],number[j]))
{
t=number[i];
number[i]=number[j];
number[j]=t;
}
}
}
}
int main()
{
int number[10];
int i,N;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&number[i]);
}
sort(number,N,shengxu);
for(i=0;i<N;i++) printf(" %d",number[i]);
printf("\n");
sort(number,N,jiangxu);
for(i=0;i<N;i++) printf(" %d",number[i]);
}
**
结果就是一个升序,一个降序,引入的compare增加了sort函数的通用性,满足条件的进行改变,这个条件是否满足,就由sort中的实参函数决定