博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取数组中前K小的数字
阅读量:2377 次
发布时间:2019-05-10

本文共 1829 字,大约阅读时间需要 6 分钟。

public class GetMinKNums {    //向堆中插入元素    public static void insert(int[] arr, int index, int value) {        arr[index] = value;        while (index != 0) {            int parent = (index - 1) / 2;            if (arr[parent] < arr[index]) {                swap(arr, parent, index);                index = parent;            } else {                break;            }        }    }    //arr[0]向下进行heapify过程    public static void heapify(int[] arr) {        int index = 0;        int left = 2 * index + 1;        int right = left + 1;        int largest = index;        while (left < arr.length) {            if (arr[left] > arr[index]) {                largest = left;            }            if (right < arr.length && arr[right] > arr[largest]) {                largest = right;            }            if (largest != index) {                swap(arr, largest, index);            } else {                break;            }            index = largest;            left = 2 * index + 1;            right = left + 1;        }    }    public static int[] getMinKNumsByHeap(int[] arr, int k) {        if (k < 1 || k > arr.length) {            return arr;        }        int[] kHeap = new int[k];        for (int i = 0; i < k; i++) {            insert(kHeap, i, arr[i]);        }        for (int i = k; i < arr.length; i++) {            if (arr[i] < kHeap[0]) {                kHeap[0] = arr[i];                heapify(kHeap);            }        }        return kHeap;    }    private static void swap(int[] arr, int i, int j) {        int temp = arr[i];        arr[i] = arr[j];        arr[j] = temp;    }    public static void main(String[] args) {        int[] arr = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};        int[] res = getMinKNumsByHeap(arr, 5);        for (int i : res) {            System.out.print(i + " ");        }    }}

转载地址:http://giaxb.baihongyu.com/

你可能感兴趣的文章
Linux下访问内存物理地址
查看>>
mmap测试程序
查看>>
linux 启动详解
查看>>
在linux内核中操作文件的方法
查看>>
Linux下Socket编程
查看>>
Linux内核和用户空间通信的方式— proc文件和mmap共享内存
查看>>
基于DSP/BIOS和NDK的嵌入式网络操作系统设计方案
查看>>
CCS开发环境搭建小结
查看>>
DM642 gel文件和.cmd文件参考
查看>>
DSP软件优化小实验
查看>>
DSP/BIOS 介绍
查看>>
多线程编程之重点--使用DSP/BIOS时选择线程类型的参考方法
查看>>
DSP/BIOS在嵌入式数据采集系统中的应用
查看>>
基于DSP/BIOS和NDK的嵌入式网络操作系统设计方案
查看>>
迅雷C++试题及解答
查看>>
Linux 中断学习之小试牛刀篇
查看>>
中断之原理篇
查看>>
高内聚 低耦合
查看>>
GUI开发之DirectFB
查看>>
GTK/DirectFB两个闪烁的问题
查看>>