在王桂林老师给的样例上稍微做了调整。
王老师给的样例是:
typedef int(*Comp)(int, int);
void popSort(int *p, int len, Comp com=ascend);
我最终实现为如下的代码:
#include <iostream>
using namespace std;
typedef void(*Exchange)(int &a, int &b);
void ascendFun(int &a, int &b);
void descendFun(int &a, int &b);
Exchange ascend = ascendFun;
void popSort(int *p, int len, Exchange exch=ascend);
void ascendFun(int &a, int &b)
{
int t;
if(a>b)
{
t = a;
a = b;
b = t;
}
}
void descendFun(int &a, int &b)
{
int t;
if(b>a)
{
t = a;
a = b;
b = t;
}
}
void popSort(int *p, int len, Exchange exch)
{
for(int i=0; i<len; i++)
{
for(int j=0; j<len-i-1; j++)
{
exch(p[j],p[j+1]);
}
}
}
int main()
{
int arrInt[]={1,5,2,4,7,9,0,6,8,3};
int len = sizeof(arrInt)/sizeof(int);
popSort(arrInt,len);
for(int i=0; i<len-1; i++)
{
cout<<arrInt[i]<<", ";
}
cout<<arrInt[len-1]<<endl;
popSort(arrInt,len,descendFun);
for(int i=0; i<len-1; i++)
{
cout<<arrInt[i]<<", ";
}
cout<<arrInt[len-1]<<endl;
return 0;
}