快速排序(分治)

算法思想:
        选取合适的key值,将比key值小的数排在数组左边,比key值大的数排在数组右边。再对key左半部分排序,key右半部分排序。


代码:
#include <iostream>

using namespace std;

void QuickSort(int *p, int start, int end)
{
	if(start >= end)
		return;
	int i = start, j = end;
	int key = p[start];
	while( i != j )				//比key大的数排在右边,比key小的数排在左边 
	{
		while( j > i && p[j] >= key)
			--j;
		swap(p[i],p[j]);
		while(i < j && p[i] <= key)
			++i;
		swap(p[i],p[j]);
	}
	QuickSort(p,start,i-1);		//左 右 部分进行快速排序 
	QuickSort(p,i+1,end);
}

int main()
{
	int number;
	cin >> number;
	int *p = new int[number];
	for(int i = 0; i < number; ++i)
		cin >> p[i];
	QuickSort(p,0,number-1);
	for(int i = 0; i < number; ++i)
		cout << p[i] << " ";
}

猜你喜欢

转载自blog.csdn.net/adorkable_thief/article/details/80202831