您的位置:首页 > 编程语言 > Go语言

华为oj: 输入n个整数,输出其中最小的k个

2015-08-27 15:41 519 查看
输入n个整数,输出其中最小的k个。详细描述:接口说明原型:bool GetMinK(unsignedint uiInputNum, int * pInputArray, unsignedint uiK, int * pOutputArray);输入参数:     unsignedint uiInputNum //输入整数个数int * pInputArray  //输入整数数组unsignedint uiK   //需输出uiK个整数输出参数(指针指向的内存区域保证有效):    int * pOutputArray //最小的uiK个整数返回值:        false 异常失败          true  输出成功  
知识点循环,数组
运行时间限制10M
内存限制128
输入输入说明 

1 输入两个整数 

2 输入一个整数数组
输出输出一个整数数组
样例输入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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithms 华为oj sort