快速排序+快速选择(常用于筛选前N个最大or最小)-java实现
最近这一两天,终于有空复习以前学习的东西了。前面忙着学SpringCloud和Netty感觉花费了太多时间,做项目也是。后来实习的面试准备就等于没准备,全靠着以前学习的记忆面试。果不其然,效果不是很好。
这里建议大家做项目量力而行,最好还是多学习和复习所学的知识。毕竟别人往往一两句话就认定了你的项目的水准和花费的努力。而复习所学的知识,反而才更适合现在的环境。
吐槽完毕,最近终于有时间做题了,重新复习了下快排。(毕竟用了很多次,所以写一写,当作复习了)
下面是java版本的快速排序、快速选择。
public Test{
@Test
public void testSort() {
// 选择前11小的数字
int[] arr1 = {
10, 10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 7, 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1};
quickTopN(arr1, true, 0, arr1.length - 1, 10);
System.out.println("选择前11小的数字");
for (int item : arr1) {
System.out.printf("%d ", item);
}
System.out.println();
// 选择前11大的数字
int[] arr2 = {
1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,