数组中找出最小的K个数

题目

给出一个数组,找出K个最小的值

例如给出数组{5,2,4,3,1},给定K值3,则输出结果为{2,3,1}

程序

先给出第一个版本的程序

 1     public static void printKNum(int[] source, int k) {//算法入口
 2         if (k <= 0) {
 3             System.out.println("请出入合法的K值");
 4         } else if (source.length <= k) {//如果数组的长度小于等于K,则全部输出
 5             System.out.println(Arrays.toString(source));
 6         } else {
 7             int size = 1;//记录链表的长度
 8             Node end = new Node(source[0]);
 9             for (int i = 1; i < source.length; i++) {//迭代N次
10                 if (source[i] < end.value) {//如果值小与最后一个的value,则进行插入到列表的操作
11                     findSideAndInsert(source[i], end);
12                     size++;
13                     if (size > k) {
14                         end = end.last;
15                     }
16                 }
17             }
18             end.printLastAll();
19         }
20     }
21 
22     private static void findSideAndInsert(int value, Node end) {//迭代K次,且列表有序
23         if (end.last == null) {
24             end.last = new Node(value);
25         } else {
26             if (value < end.last.value) {
27                 findSideAndInsert(value, end.last);
28             } else {
29                 Node current = new Node(value);
30                 current.last = end.last;
31                 end.last = current;
32             }
33         }
34     }
35 
36     private static class Node {
37         int value;
38         Node last;
39 
40         public Node(int value) {
41             this.value = value;
42         }
43 
44         public void printLastAll() {
45             System.out.println(this.value);
46             if (last != null) {
47                 this.last.printLastAll();
48             }
49         }
50     }

 

转载于:https://www.cnblogs.com/sachen/p/7107339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值