快排算法

最近在看算法導論,第七章講的是快排算法。

本篇文章使用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);
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章