随便给一组数据,然后用几种方法来对它进行排序,再取前面k个较小/大的数,设k=3
从小到大排:
int k = 3;
int[] nums = new int[] { 4, 1, 6, 3, 7, 9, 2, 5 };
// 第一种,调库
Arrays.sort(nums);
for (int i = 0; i < k; i++) {
System.out.print(nums[i] + " ");
}
// 第二种,动态数组
ArrayList list = new ArrayList<>();
Arrays.sort(nums);
for (int i = 0; i < k; i++) {
list.add(nums[i]);
}
System.out.println(list);
// 第三种,优先队列,将数组的元素加入到队列中,
PriorityQueue pq = new PriorityQueue<>();
for (int i = 0; i < nums.length; i++) {
pq.add(nums[i]);//排进去,会自动给你生成小顶堆
}
// 然后设一个ArrayList来存储要从队列中取出的元素
ArrayList list1 = new ArrayList<>();
for (int i = 0; i < k; i++) {
list1.add(pq.poll());
}
System.out.println(list1);
// 第四种
ArrayList list2 = new ArrayList<>();
for (int i : nums) {
list2.add(i);
}
Collections.sort(list2);
for (int i = 0; i < k; i++) {
System.out.println(list2.get(i));
}
从大到小:
第一种,PriorityQueue实现大顶堆,加入(new Comparator
第二种,Collections.sort()方法
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue;
public class FromBigToSmall {
public static void main(String[] args) {
int k = 3;
int[] nums = new int[] { 4, 1, 6, 3, 7, 9, 2, 5 };
PriorityQueue pQueue = new PriorityQueue<>(new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
// 本来应该o1-o2的,如果o2-o1>0,那么o2>o1;反之,o1>o2
return o2 - o1;
}
});
for (int i = 0; i < nums.length; i++) {
pQueue.add(nums[i]);
}
ArrayList list = new ArrayList<>();
for (int i = 0; i < k; i++) {
list.add(pQueue.poll());
}
System.out.println(list);
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class FromBigToSmall {
public static void main(String[] args) {
int k = 3;
int[] nums = new int[] { 4, 1, 6, 3, 7, 9, 2, 5 };
// 用Collections
ArrayList list1 = new ArrayList<>();
for (int i : nums) {// for-each循环,把nums数组的元素的值依次赋给i
list1.add(i);
}
Collections.sort(list1, new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2 - o1;
}
});
for (int i = 0; i < 3; i++) {
System.out.print(list1.get(i));
}
}
}
end.