007:排序,又见排序!

自己编写一个能对任何类型的数组进行排序的mysort函数模版。只能写一个mysort模板,不能写mysort函数!
#include
using namespace std;

bool Greater2(int n1,int n2)
{
return n1 > n2;
}
bool Greater1(int n1,int n2)
{
return n1 < n2;
}
bool Greater3(double d1,double d2)
{
return d1 < d2;
}

template <class T1,class T2>
void mysort(
// 在此处补充你的代码
#define NUM 5
int main()
{
int an[NUM] = { 8,123,11,10,4 };
mysort(an,an+NUM,Greater1); //从小到大排序
for( int i = 0;i < NUM; i ++ )
cout << an[i] << “,”;
mysort(an,an+NUM,Greater2); //从大到小排序
cout << endl;
for( int i = 0;i < NUM; i ++ )
cout << an[i] << “,”;
cout << endl;
double d[6] = { 1.4,1.8,3.2,1.2,3.1,2.1};
mysort(d+1,d+5,Greater3); //将数组从下标1到下标4从小到大排序
for( int i = 0;i < 6; i ++ )
cout << d[i] << “,”;
return 0;
}

template <class T1,class T2>
void mysort(T1 s, T1 e, T2 op)
{
    int n = e - s;  //我可能是太垃圾了,末减首就是个数了。。。
    int i, j;
    for(i = 0; i < n-1; i++)  //我用的冒泡排序
    {
        for(j = 0; j < n-1-i; j++)
        {
            if(!op(*(s+j), *(s+j+1)))
            {
                swap(*(s+j), *(s+j+1));//这里还有一种是用auto定义一个变量,在c++里用auto必须初始化
                                         auto t = *(s+j); //这里t的类型就根据后面传入的类型来判断,好神奇奥
                                         *(s+j) = *(s+j+1);
                                         *(s+j+1) = t;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值