快速排序_数组_模板
1.近日工作需要,整理了一份快速排序的类CSort_Quick。
代码如下:
#pragma once
template<typename T>
class CSort_Quick
{
public:
CSort_Quick(void)
{
};
~CSort_Quick(void)
{
};
//
//[in]_array:数组首指针
//[in]min;数组首下标,一般为0
//[in]num:数据最大下标或元素个数num = sizeof(_array)/sizeof(T)-1
//
void Sort(T* _array,int min,int num)
{
if(num<2) return ;
int position = 0;
if (min<num)
{
position = _partition(_array,min,num); //返回划分元素的最终位置
Sort(_array,min,position-1); //划分左边递归
Sort(_array, position + 1,num); //划分右边递归
}
};
private:
//交换
void _swap(T* a, T* b)
{
T temp = *a;
*a = *b;
*b = temp;
};
//[Fun]线性表/数组划分
//[in ]a:数组
//[in ]p:
//[in ]r:
//[Rtn]
int _partition(T a[], int p, int r)
{
T key = a[r];//取最后一个
int i = p - 1;
for (int j = p; j < r; j++)
{
if (a[j] <= key)
{
i++;
//i表示小于key元素的最后一个索引,如果有a[j]小于key的时候,i+1 后交换
_swap(&a[i], &a[j]);
}
}
_swap(&a[i + 1], &a[r]);//将key切换到中间来,左边是小于key的,右边是大于key的值。
return i + 1;
};
};
2.使用范例
void main()
{
//生成随机浮点数组
float _ary[8] = {rand()%100*1.0 ,rand()%100*1.0 ,rand()%100*1.0 ,rand()%100*1.0,rand()%100*1.0 ,rand()%100*1.0 ,rand()%100*1.0 ,rand()%100*1.0};
TRACE("--浮点数组------------");
TRACE("排序前:[%.2f] [%.2f] [%.2f] [%.2f] [%.2f] [%.2f] [%.2f] [%.2f]\r\n",
dis[0],dis[1],dis[2],dis[3],dis[4],dis[5],dis[6],dis[7]);
CSort_Quick<float> qsort_float;
qsort_float.Sort(_ary,0,sizeof(_ary)/sizeof(float)-1);
TRACE("-----------------------");
//
TRACE("排序后:[%.2f] [%.2f] [%.2f] [%.2f] [%.2f] [%.2f] [%.2f] [%.2f]\r\n",dis[0],dis[1],dis[2],dis[3],dis[4],dis[5],dis[6],dis[7]);
//生成随机整数数组
int _ary[8] = {rand()%100 ,rand()%100 ,rand()%100 ,rand()%100,rand()%100 ,rand()%100*1.0 ,rand()%100 ,rand()%100};
TRACE("排序前:[%.2d] [%.2d] [%.2d] [%.2d] [%.2d] [%.2d] [%.2d] [%.2f]\r\n",
dis[0],dis[1],dis[2],dis[3],dis[4],dis[5],dis[6],dis[7]);
CSort_Quick<int> qsort_int;
qsort_int.Sort(_ary,0,sizeof(_ary)/sizeof(int)-1);
//
TRACE("排序后:[%.2d] [%.2d] [%.2d] [%.2d] [%.2d] [%.2d] [%.2d] [%.2d]\r\n",dis[0],dis[1],dis[2],dis[3],dis[4],dis[5],dis[6],dis[7]);
}
3.执行结果
--浮点数组------------
排序前:[41.00] [67.00] [34.00] [0.00] [69.00] [24.00] [78.00] [58.00]
排序后:[0.00] [24.00] [34.00] [41.00] [58.00] [67.00] [69.00] [78.00]
-----------------------
--整型数组------------
排序前:[41] [67] [34] [00] [69] [24] [78] [58]
排序后:[00] [24] [34] [41] [58] [67] [69] [78]
-----------------------