描述
n个数,要求输出其中的m个最大数
想法1
开辟辅助数组,用插入排序,将前m最大数插入到辅助数组中,时间复杂度O(n*m)
想法2
类似快速排序的想法,将前m大的数都聚到最左边,再进行一次排序输出
取一个key,将大于key的数放到左边,若大于m则左边递归;若小于m,右边递归
实现代码1:
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
void MergeDeal(int a[],int s,int e,int b[],int m){
int i,j;
for(i=s;i<=e;++i){
for(j=m-1;j>=0;--j){
if(b[j] < a[i]){
b[j+1] = b[j];
}else{
b[j+1] = a[i];
break;
}