排序算法:快速排序

快速排序采用分治递归的思想,首先选取一个参考元素(比如第一个元素),然后将剩余的元素分成两部分:一部分所有元素都小于参考元素,一部分所有元素都大于参考元素,然后将参考元素插入到分界点;对于分开的两部分,递归采用同样的方法获取分类,最终将获取到完整排序的数列。


C++实现代码:

#include <iostream>
#include <vector>

using namespace std;

template<typename T>
void QuickSort(int minIdx, int maxIdx, vector<T> &vec);


int main()
{
	int arr[] = { 8, 3, 10, 49, 2, 6, 13, 5, 14, 7, 51, 53, 55 };
	vector<int> vec(&arr[0], &arr[13]);
	QuickSort(1, vec.size(), vec);

	for (int vIdx = 0; vIdx < vec.size(); vIdx++)
	{
		cout << "value in " << vIdx << " is " << vec[vIdx] << endl;
	}

	return 0;
}


template<typename T>
void QuickSort(int minIdx, int maxIdx, vector<T> &vec)
{
	int VSize = vec.size();

	if ((VSize < 1) || (minIdx <= 0) || (minIdx > VSize) || (maxIdx < 0) || (maxIdx > VSize) || (maxIdx <= minIdx))
		return;

	if (1 == VSize)
	{
		cout << "Only one element in vector: " << vec[0] << endl;
		return;
	}

	if (minIdx == maxIdx - 1)
	{
		if (vec[minIdx - 1] > vec[minIdx])
		{
			vec[minIdx - 1] ^= vec[minIdx];
			vec[minIdx] ^= vec[minIdx - 1];
			vec[minIdx - 1] ^= vec[minIdx];
		}
	}
	else
	{
		int firstPos = minIdx;
		
		for (int vIdx = minIdx; vIdx < maxIdx; vIdx++)
		{
			if (vec[minIdx - 1] > vec[vIdx])
			{
				if (firstPos < vIdx)
				{
					vec[firstPos] ^= vec[vIdx];
					vec[vIdx] ^= vec[firstPos];
					vec[firstPos] ^= vec[vIdx];
				}

				firstPos++;
			}
		}

		if ((minIdx < firstPos) || (firstPos > maxIdx))
		{
			vec[firstPos - 1] ^= vec[minIdx - 1];
			vec[minIdx - 1] ^= vec[firstPos - 1];
			vec[firstPos - 1] ^= vec[minIdx - 1];
		}

		QuickSort(minIdx, firstPos - 1, vec);
		QuickSort(firstPos + 1, maxIdx, vec);

	}


	return;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值