快速排序(C++模版技术实现)

下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>

//
// C++模版技术实现快速排序. 
// 

#include <cstdlib>
#include <cstring>
#include <iostream> 
#include <stdexcept>

//
// 两值交换. 
//
template <typename T>
inline void swap(T &x, T &y)
{
	T temp = x;
	x = y;
	y = temp;
}
 
//
// 快速排序函数模版. 
// 以首元素为基准(pivot)进行划分. 
//
template <typename T>
void quickSort(T *array, size_t first, size_t last)
{
	if (NULL == array) {
		throw std::invalid_argument("参数 array 不能为 NULL.");
	}
	
	if (first < last)
	{
		static size_t pivot, i, j;
		static T *pPivotValue;
		
		pivot = first, i = first + 1, j = last;
		pPivotValue = &array[pivot];
		
		while (i < j) 
		{
			if (array[i] > *pPivotValue) {
				swap(array[i], array[j--]);
			} 
			else {
				i++;
			}
		}
		if (*pPivotValue <= array[i]) {
			--i;
		}
		swap(array[pivot], array[i]);
		
		quickSort(array, first, i);
		quickSort(array, j, last);
	}
}


//
// 测试.
//
int main(void)
{
	char szTest[] = "Quick sort algorithm test case !"; 
	int iarrTest[] = {23, 12, 2, 123, 72, 35, 49, 51, 83, 94, 65}; 
	const size_t INT_ARR_SIZE = sizeof(iarrTest) / sizeof(iarrTest[0]);

	quickSort(szTest, 0, strlen(szTest) - 1);
	quickSort(iarrTest, 0, INT_ARR_SIZE - 1);
	
	std::cout << szTest << std::endl;

	for (size_t i = 0; i < INT_ARR_SIZE; ++i)
	{
		std::cout << iarrTest[i] << " "; 
	}
	std::cout << std::endl;

	return EXIT_SUCCESS; 
}
原文地址:https://www.cnblogs.com/wxxweb/p/2060882.html