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

 

描述

输入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]+" ");
	}
}

  

posted @ 2016-03-17 17:35  再见,少年  Views(408)  Comments(0Edit  收藏  举报