C++-使用函式指標模仿sort排序
阿新 • • 發佈:2021-08-05
#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