问题描述
- JAVA实现:一个数组里有1000个数,依次输出最大的10个数
-
刚接触JAVA,求各位前辈解答...............
解决方案
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));
}
解决方案二:
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个数,先对这1000个数进行由大到小排序,然后输出数组的前十个数。
解决方案四:
这个和使用哪种语言的关系不大,这是数据结构的内容,可以有很多种查询方法,你可以看看数据结构里边的查询方式
解决方案五:
1、这是一个基本的排序问题,把1000个数按从大到小的顺序排序,之后输出前十个,1000个数可以采用时间复杂度较小的排序算法,快排或者合并;
2、单纯的考虑输出10个数,可以建立一个大小为10的数组并对数组排序,之后遍历1000个数,将数组中最小的数和遍历到的数字进行大小比较,数组
数字大则跳过,小则替换;直至全部遍历结束,之后输出数组就行。
解决方案七:
最fancy的做法肯定是用introduction to algorithm 那本书里面的determinic selection 方法。可以达到O(n)的时间复杂度。比其他需要排序的方法O(nlogn)还是要快的。
解决方案八:
可以排序后直接输出最大的十个
解决方案九:
大量数据输出其中最大的几个数用堆排序
解决方案十:
因为数组,所以几种经典的排序方式,例如冒泡排序
例:
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;
}
}
}
排序后再输出前十位