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

来源:互联网 发布:java poi是什么意思 编辑:程序博客网 时间:2024/05/22 15:02

题目:输入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;}

执行结果: