思路:找出前n個數最大的值,每次遇到比最大值小的數,交換數值,並重新確定前n個數中的最大值。
代碼:
#include <iostream>
#include<vector>
using namespace std;
void swap1(vector<int> &a,int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
void find_min_n_nums(vector<int> &a,int n)
{
int max_num_index=0;
for(int i=1;i<n;i++)
{
if(a[i]>a[max_num_index])
max_num_index=i;
}
for(unsigned int j=n;j<a.size();j++)
{
if(a[j]<a[max_num_index])
{
swap1(a,max_num_index,j);
for(int i=1;i<n;i++)
{
if(a[i]>a[max_num_index])
max_num_index=i;
}
}
}
for(auto i=0;i<n;i++)
cout<<a[i]<<' ';
cout<<endl;
}
int main()
{
vector<int> vec{2,4,3,5,0,2,1,9};
int nums=4;
find_min_n_nums(vec,nums);
return 0;
}
輸出:
2 2 1 0
Process returned 0 (0x0) execution time : 0.029 s
Press any key to continue.