对一组数的从小到大排和从大到小排的几种方法

随便给一组数据,然后用几种方法来对它进行排序,再取前面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.

你可能感兴趣的:(对一组数的从小到大排和从大到小排的几种方法)