查找最小的K个元素(快速排序法思路)

题目:输入n个整数,输出其中最小的k个。

例如:输入1,2,3,4,5,6,7,8这8个数字,则最小的4个数字为1,2,3,4

#include <iostream>

using namespace std;
const int N = 10000;

int partition(int *a, int b, int e)
{
	int i = b - 1;
	 
	for(int j = b; j < e; j++)
	{
		if(a[j] < a[e])
		{
			i++;

			//交换a[i]和a[j]
			int tem = a[i];
			a[i] = a[j];
			a[j] = tem;
		}
	}
	
	//a[i+1]和a[e]交换
	int tem = a[i + 1];
	a[i + 1] = a[e];
	a[e] = tem;

	return i + 1;	//返回合适位置
	
}

void qsort(int *a, int start, int end)
{
	if(start < end)
	{
		int q = partition(a,start,end);
		qsort(a, start, q-1);
		qsort(a, q+1, end);
	}
}

void fun(int *a, int size, int k)
{
	qsort(a, 0, size - 1);	//对a数组进行快速排序
	for(int i = 0; i < k; i++)	//输出前k个最小的数
		cout << a[i] << " ";
	cout << endl;
}

int main()
{
	int a[] = {3,4,8,2,1,99};
	fun(a, 6, 3);
	return 0;
}

执行结果:


你可能感兴趣的:(查找最小的K个元素(快速排序法思路))