• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C++快速排序算法,用到了函数指针

OC/C/C++ 水墨上仙 3082次浏览

C++快速排序算法,用到了函数指针

#include <iostream>
#include <algorithm>
#include <string>
#include <cctype>
struct example{
    int id;
    std::string name;
};
template <class T>
void quickSort(T uA[], int l, int r, bool (*less)(T, T));
template <class T>
int partition(T uA[], int l, int r, bool (*less)(T, T));
bool intCheck(int a, int b){
    return (a < b);
}
bool stringCheck(std::string a, std::string b){
    for(int i = 0; i < a.length(); i++)
        a[i] = tolower(a[i]);
    for(int i = 0; i < b.length(); i++)
        b[i] = tolower(b[i]);
    if(strcmp(a.c_str(), b.c_str()) >= 0)
        return false;
    else return true;
}
bool exampleCheck(example a, example b){
    if(strcmp(a.name.c_str(), b.name.c_str()) >= 0) return false;
    else return true;
}
int main(int argc, char *argv[]){
    int iArray[] = { 2, 1, 56, 213, 2, 32, 32216, 14 };
    std::string sArray[] = { "Hello", "how are you?", "elephant", "aaah!", "zzzzz", "queen" };
    example structArray[] = { {1, "Joe"},
                              {4, "Billy"},
                              {2, "Zander"},
                              {3, "Tom"} };
    quickSort(iArray, 0, 7, intCheck);
    quickSort(sArray, 0, 5, stringCheck);
    quickSort(structArray, 0, 3, exampleCheck);
    std::cout << "Integers:" << std::endl;
    for(int i = 0; i < 8;i++)
        std::cout << '\t' << iArray[i] << std::endl;
    std::cout << std::endl << "String:" << std::endl;
    for(int i = 0; i < 6;i++)
        std::cout << '\t' << sArray[i] << std::endl;
    std::cout << std::endl << "Structure (By name):" << std::endl;
    for(int i = 0; i < 4;i++)
        std::cout << "\t{ " << structArray[i].id << ", " << structArray[i].name << " }" << std::endl;
    std::cin.get();
    return 0;
}
template <class T>
int partition(T uA[], int l, int r, bool (*less)(T, T)){
     int pos = l;
     std::swap(uA[r], uA[pos]);
     if (l < r){
        for(int i = l; i < r; i++) if((*less)(uA[i], uA[r])) std::swap(uA[i], uA[pos++]);
        std::swap(uA[r], uA[pos]);
        }
     return pos;
}
template <class T>
void quickSort(T uA[], int l, int r, bool (*less)(T, T)){
     if(r > l){
        int pos = partition( uA, l, r, less );
        quickSort( uA, l, pos-1, less);
        quickSort( uA, pos+1, r, less);
     }
}


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明C++快速排序算法,用到了函数指针
喜欢 (0)
加载中……