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;
}
C++:利用模板类进行若干排序算法
最新推荐文章于 2024-07-19 13:40:17 发布