快排算法

最近在看算法导论,第七章讲的是快排算法。

本篇文章使用c++来实现:

书中的伪代码如下:
在这里插入图片描述在这里插入图片描述快排的核心思想是找出一个分割数组的元素,在小于该元素的数组索引对应的元素值小于该值,在大于该元素的索引的数组元素大于该值。当然等于也是可以的。本文是跟书中一致,选择数组中最后一个元素作为对比对象。

代码如下:

template<typename T>
void exchange(T& l, T& r)
{
	T tmp = l;
	l = r;
	r = tmp;
}

template <typename T>
size_t partition(vector<T>& input, int p, int r)
{
	T x = input[r];
	int i = p - 1;
	for (int j = p; j < r ; j++)
	{
		if (input[j] <= x)
		{
			i++;
			exchange<T>(input[i], input[j]);
		}
	}
	exchange<T>(input[i+1], input[r]);
	return i + 1;
}

template <typename T>
void quick_sort(vector<T> &input, int p, int r)
{
	if (p < r)
	{
		if (r == (p + 1))
		{
			if (input[p] > input[r])
				exchange(input[p], input[r]);
		}
		else
		{
			int q = partition(input, p, r);
			quick_sort<T>(input, p, q - 1);
			quick_sort<T>(input, q + 1, r);
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章