目录
一、使用方法
使用回调函数。
实现升序或者降序的关键就是在比较的时候那个大于小于号的选择了,为此我们可以使用回调函数来同时实现升序降序。
//定义一个名为CallBack的函数指针
typedef int(*CallBack)(int, int);
int CompareA(int a, int b)
{
return a > b;
}
int CompareD(int a, int b)
{
return a < b;
}
CallBack SetMode(int mode)
{
if (mode == 1)
{
return CompareA;
}
else
{
return CompareD;
}
}
二、方法步骤
1、首先让用户进行选择升序还是降序
2、然后我们就可以根据这个选择去给判断的地方组装合适的比较函数
如果是1:那么我们就给比较的地方分配CompareA,这样就可以实现比较的地方是“>"
如果是0:那么我们就给比较的地方分配CompareD,这样就可以实现比较的地方是“<"
三、具体实现
以插入排序为例:
void InsetSort(int* a, int n)
{
printf("ascend(1) or descend(0):\n");
int mode = -1;
scanf("%d", &mode);
CallBack Compare = SetMode(mode);
int i;
for (i = 0; i < n - 1; i++)
{
//假设[0,end]是有序的,下一个待排序元素是a[end+1]
int end = i;
int tmp = a[end + 1];
while (end >= 0)
{
if (Compare(a[end],tmp))//可以使用回调函数改变升序还是降序
{
a[end + 1] = a[end];
end--;
}
else
{
break;
}
}
//1、有序数据都小(大)于a[end+1]
//2、一直到end = -1,都没找到比a[end+1]小的数
a[end + 1] = tmp;
}
}