经典算法与数据结构的c++实现——快速排序

因为是经典的算法,所以网上描述一大把,直接上个图,直观些,给记性不好的菜鸟(如我)一点儿提示。

经典算法与数据结构的c++实现——快速排序_第1张图片

快速排序是冒泡排序的一种改进。通过轴值的选择方法不同,算法的速度也不一样。本文下面的代码采取选择最左边的数值为轴值的方法。

同时算法的优化可以考虑在对小子串排序的时候,不采用递归的快速排序,而是用例如插入算法来排序,可以提升效率。

此外,还可以通过使用队列或者栈,实现无递归的快速排序来提升效率。

下面是代码(欢迎批评指点,之后应该会放到github上:https://github.com/y277an/princeton_algs4):

//---------------------------------Specification of Program------------------------------
// Program Name:快速排序
// Tools:VS_2013
// Language: C++
// Description: 可自由输入,不需要提早知道数据长度
// Date:2016.3.21
// Author:mseddl
//----------------------------------------------------------------------------------------

#include <iostream>
using namespace std;

void QuickSort(int *arr, int low, int high)
{
	int nStart = low;
	int nEnd = high;
	if (nStart >= nEnd)
	{
		return;
	}
	int nKey = arr[nStart];//以集合最左边数为枢轴
	int flag; 
	while (nStart < nEnd)
	{
		flag = nStart;//记录枢轴的位置
		while (nStart < nEnd && arr[nEnd] >= nKey)
		{
			nEnd--;
		}
		while (nStart < nEnd &&arr[nStart] <= nKey)
		{
			nStart++;
		}
		arr[flag] = arr[nEnd];
		arr[nEnd] = arr[nStart];
		arr[nStart] = nKey;
	}
	//递归
	QuickSort(arr, low, nStart - 1);
	QuickSort(arr, nStart + 1, high);
}
int main()
{
	int len(0), temp;
	int *arr = new int[100];
	char ch;
	cout << "请输入要排序的数字,以空格隔开:";
	while (1)
	{
		cin >> temp;
		arr[len++] = temp;
		cin.get(ch);
		if (ch == '\n')
		{
			break;
		}
	}
	QuickSort(arr, 0, len - 1);
	cout << "排序后的数字为:";
	for (int i = 0; i < len; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	delete[] arr;
}


你可能感兴趣的:(经典算法与数据结构的c++实现——快速排序)