C++:利用模板类进行若干排序算法

来源:互联网 发布:淘宝网 情趣内衣 模特 编辑:程序博客网 时间:2024/06/06 07:10
template <class T>class CSort{public:    CSort(int nArraySize);    virtual ~CSort();    void Bubble(T arr[]);            //冒泡排序    void insertion(T arr[]);        //插入排序    void Quick(T arr[], int leftlimit, int rightLimit);    //快速排序    void Selection(T arr[]);        //选择排序private:    int _arrSize;};template <class T>CSort<T>::CSort(int nArraySize){    if (nArraySize < 0)        _arrSize = 0;    else        _arrSize = nArraySize;}template <class T>CSort<T>::~CSort(){}template <class T>void CSort<T>::Bubble(T arr[]){    T tmp;    int last = _arrSize - 1;    bool isSorted = true;    do    {        isSorted = true;        for (int i = 0; i < last; i++)        {            if (arr[i] > arr[i + 1])            {                tmp = arr[i];                arr[i] = arr[i + 1];                arr[i + 1] = tmp;                isSorted = false;            }        }        last--;    } while (!isSorted);}template <class T>void CSort<T>::insertion(T arr[]){    T val;    for (int i = 1; i < _arrSize; i++)    {        val = arr[i];        int n;        for (n = i - 1; n >= 0 && val < arr[n]; n--)        {            arr[n + 1] = arr[n];        }        arr[n + 1] = val;    }}template <class T>void CSort<T>::Quick(T arr[], int lLimit, int rLimit){    int left = lLimit;    int right = rLimit;    int pivot = (left + right) / 2;    T tmp;    T mid = arr[pivot];    do    {        while ((arr[left] < mid) && (left < rLimit))        {            left++;        }        while ((mid < arr[right]) && (right > lLimit))        {            right--;        }        if (left <= right)        {            tmp = arr[left];            arr[left] = arr[right];            arr[right] = tmp;            left++;            right--;        }    } while (left <= right);    if (lLimit < right)    {        CSort<T>::Quick(arr, lLimit, right);    }    if (left < rLimit)    {        CSort<T>::Quick(arr, left, rLimit);    }}template <class T>void CSort<T>::Selection(T arr[]){    T tmp;    int min;    for (int i = 0; i < _arrSize - 1; i++)    {        min = i;        for (int n = i + 1; n < _arrSize; n++)        {            if (arr[n] < arr[min])            {                min = n;            }        }        tmp = arr[min];            //交换位置        arr[min] = arr[i];        arr[i] = tmp;    }}int main(){    CSort<int> _sort(11);    int arr[] = { 24, 19, 13, 90, -35, 23, 46, -5, 128, 69, 0 };    _sort.Selection(arr);    for (int i = 0; i < sizeof arr / sizeof arr[0]; i++)    {        cout << arr[i] << "\t";    }    cout << endl;    return 0;}

0 0