述 | |
---|---|
知识点 | 循环,数组 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入说明 |
输出 | 输出一个整数数组 |
样例输入 | 5 2 1 3 5 7 2 |
样例输出 | 1 2 |
下面提供了两种方法:
方法一:用数字,指针的方式,需要自己写排序函数,本题采用希尔排序。
方法二:利用vector可以动态创建,利用algorithm头文件里面的sort函数排序
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void shellsort(int arr[],int N)
{
int i,j,d;
int temp;
for(d=N/2;d>=1;d/=2)
{
for(i=d;i<N;i++)
{
temp=arr[i];
for(j=i-d;j>=0&&temp<arr[j];j-=d)
arr[j+d]=arr[j];
arr[j+d]=temp;
}
}
}
bool GetMinK0(unsigned int Num, int * pInputArray, unsigned int K, int * pOutputArray)
{
int i;
if (K>Num||K==0||Num==0) return false;
shellsort(pInputArray,Num);
for(i=0;i<K;i++)
{
pOutputArray[i]=pInputArray[i];
}
return true;
}
vector<int> GetMinK1(vector<int> in,int Num,vector<int> out,int K)
{
int i;
sort(in.begin(),in.end());
for(i=0;i<K;i++)
out[i]=in[i];
return out;
}
int main()
{
unsigned int k;
unsigned int len;
int i;
cin>>len>>k;
int *in =new int[len];
int *out=new int[k];
for(i=0;i<len;i++)
cin>>in[i];
GetMinK0(len,in,k,out);
for(i=0;i<k-1;i++)
cout<<out[i]<<' ';
cout<<out[k-1];
delete[] in;
delete[] out;
vector<int> in1(len);
vector<int> out1(k);
for(i=0;i<len;i++)
cin>>in1[i];
out1= GetMinK1(in1,len,out1,k);
for(i=0;i<k-1;i++)
cout<<out[i]<<' ';
cout<<out[k-1];
}