1. 程式人生 > 其它 >C++-使用函式指標模仿sort排序

C++-使用函式指標模仿sort排序

#include <vector>
#include<algorithm>

double Ascending(double element1, double element2);
double Descending(double element1, double element2);
void Swap(vector<double>::iterator element1, vector<double>::iterator element2);
void CustomSort(vector<double>::iterator begin, vector<double>::iterator end, double(*compare)(double, double));
void Display(vector<double> vec);
using namespace std;
int main()
{

    vector<double> res1;

    res1.push_back(10);
    res1.push_back(3);
    res1.push_back(4);
    res1.push_back(2);
    res1.push_back(6);
    res1.push_back(5);

    printf("排序前:\n");
    Display(res1);
    cout << "---------------------" << endl;
    CustomSort(res1.begin(), res1.end(), Descending);
    printf("排序後:\n");
    Display(res1);
}

void CustomSort(vector<double>::iterator begin, vector<double>::iterator end, double(*compare)(double, double))
{
    for (int i = 0; i < end - begin; ++i)
    {
        vector<double>::iterator res = begin;
        while (res + 1 != end)
        {
            double a = *res;
            double b = *(res + 1);
            if ((*compare)(*res, *(res + 1)))
            {
                Swap(res, res + 1);
            }
            ++res;
        }
    }
}

void Swap(vector<double>::iterator element1, vector<double>::iterator element2)
{
    double temp;
    temp = *element1;
    *element1 = *element2;
    *element2 = temp;
}

double Ascending(double element1, double element2)//升序
{
    if (element1 > element2)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

double Descending(double element1, double element2)//降序
{
    if (element1 < element2)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
void Display(vector<double> vec)
{
    for (int i = 0; i < vec.size(); ++i)
    {
        cout << vec[i] << endl;
    }
}

參考連結:https://blog.csdn.net/weichanjuan3/article/details/46888737