C++-2025.7.31
请使用函数模板,写一个能够针对所有数据类型的数据的快速排序函数
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>using namespace std;class Stu{
private:public:};template<typename T1, typename T2, typename T3>
// 一次排序
T2 one_sort (T1* arr, T2 low, T3 high) {// 记录基准数T1 pivot = *(arr+low);// 左右指针碰到一起时退出循环while (high > low) {while (*(arr+high) >= pivot && high > low) {high--;}*(arr+low) = *(arr+high);while (*(arr+low) <= pivot && high > low) {low++;}*(arr+high) = *(arr+low);}*(arr+low) = pivot;return low;
}template<typename T1, typename T2, typename T3>
// 快速排序
void sort(T1* arr, T2 low, T3 high) {T2 ret;if (high > low) {ret = one_sort(arr, low, high);// 递归// 左边sort(arr, low, ret - 1);// 右边sort(arr, ret + 1, high);}
}int main(int argc,const char** argv){int arr[] = {4,5,7,3,6,2,45,21,32};sort(arr, 0, sizeof(arr)/sizeof(int)-1);for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {cout << arr[i] << " ";}cout << endl;double arr1[] = {4.2,5.6,7.7,3.1,6.5,2};sort(arr1, 0, sizeof(arr1)/sizeof(double)-1);for (int i = 0; i < sizeof(arr1)/sizeof(double); i++) {cout << arr1[i] << " ";}cout << endl;char arr2[] = {'a', 'F', 't', 'e', 'Q', 'y', 'z'};sort(arr2, 0, sizeof(arr2)/sizeof(char)-1);for (int i = 0; i < sizeof(arr2)/sizeof(char); i++) {cout << arr2[i] << " ";}cout << endl;return 0;
}