快速排序_数组_模板

快速排序_数组_模板

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]
-----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值