您的位置:首页 > 其它

输入n个整数,输出其中最小的k个

2016-03-17 17:35 295 查看
描述输入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
package com.oj;

import java.util.Scanner;
public class Test {
public static void sinkDown(int[] data,int k,int length){
while(2*k<=length){
int maxpos = 2*k;
if(data[maxpos]>data[maxpos+1])
maxpos += 1;
if(data[k]>data[maxpos]){
int temp = data[maxpos];
data[maxpos] = data[k];
data[k] = temp;
k = maxpos;
}else
break;
}
}

public static void deleteMin(int[] data,int length){
System.out.print(data[1]);
data[1] = data[length];
length--;
sinkDown(data,1,length);
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] numstr = in.nextLine().split(" ");
int num = Integer.parseInt(numstr[0]);
int n = Integer.parseInt(numstr[1]);
String[] datastr = in.nextLine().split(" ");
int[] data = new int[datastr.length+1];
//System.out.println("hello ");
for(int i = 1;i <= num; i++)
data[i] = Integer.parseInt(datastr[i-1]);

for(int i = num/2;i >= 1; i--)
sinkDown(data,i,data.length);
for(int i = 1;i <= n; i++){
deleteMin(data,data.length-i);
if(i!=n)
System.out.print(" ");
else
System.out.println();
}
System.out.println();
//		for(int i = 1; i <= (num-n) ; i++)
//			System.out.print(data[i]+" ");
}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: