JAVA实现:一个数组里有1000个数,依次输出最大的10个数

刚接触JAVA,求各位前辈解答...............

这个和使用哪种语言的关系不大,这是数据结构的内容,可以有很多种查询方法,你可以看看数据结构里边的查询方式

1、这是一个基本的排序问题,把1000个数按从大到小的顺序排序,之后输出前十个,1000个数可以采用时间复杂度较小的排序算法,快排或者合并;
2、单纯的考虑输出10个数,可以建立一个大小为10的数组并对数组排序,之后遍历1000个数,将数组中最小的数和遍历到的数字进行大小比较,数组
数字大则跳过,小则替换;直至全部遍历结束,之后输出数组就行。

图片说明

最fancy的做法肯定是用introduction to algorithm 那本书里面的determinic selection 方法。可以达到O(n)的时间复杂度。比其他需要排序的方法O(nlogn)还是要快的。

可以排序后直接输出最大的十个

大量数据输出其中最大的几个数用堆排序

 Random random = new Random();
        List<Integer> item = new ArrayList<Integer>();
        for (int i = 0; i < 1000; i++) {
            //System.out.println(Math.abs(random.nextInt()) % 1000);
            item.add(Math.abs(random.nextInt()) % 1000);
        }
        Collections.sort(item);
        for (int i = item.size()-1; i >= item.size()-10; i--) {
             System.out.println(item.get(i));
        }

因为数组,所以几种经典的排序方式,例如冒泡排序

例:
for (int i = 0; i < unsorted.Length; i++)
{
for (int j = i; j < unsorted.Length; j++)
{
if (unsorted[i] > unsorted[j])
{
int temp = unsorted[i];
unsorted[i] = unsorted[j];
unsorted[j] = temp;
}
}
}
排序后再输出前十位

排序 -> 遍历(10个)

先排序,然后打印出最后十个数字就行了

学习学习图片说明

public static void main(String[] args) {
int[] array = new int[1000];
for (int i = 0; i < array.length; i++) {
array[i] = new Random().nextInt(10000);
}
for (int i = 0; i < 100; i++) {
Arrays.sort(array);
for (int j = 0; j < array.length; j++) {
array[j] = array[array.length - j - 1];
}
for (int j = 0; j < 10; j++) {
System.out.println(array[j]);
}
if (array.length > 10) {
System.arraycopy(array, 10, array, 0, array.length - 10);
}
}
}

我也想问,我自己是有思路的,但是觉得太麻烦了,所以想看看,有没有大神有好一点的思路。楼上的给的思路都不对,直接排序,然后直接拿前十个数是不行的,万一这1000个数有重复呢,这样的话,拿到的10个数就不一定是最大的10个数了;坐等大神不用排序,直接获取最大的10个数的代码

定义一个数组存储这1000个数,先对这1000个数进行由大到小排序,然后输出数组的前十个数。