快速排序时间复杂是:O(N*logN),排序速度还是杠杠的。以下是java代码:
package com.yarm.test;
import java.util.ArrayList;
import java.util.List;
public class SortTest {
/**
* 快速排序
* 时间复杂度:O(N*logN)
* @param items
*/
public static void sort(List<Integer> items) {
if(items.size() > 1) {
List<Integer> smaller = new ArrayList<Integer>();
List<Integer> same = new ArrayList<Integer>();
List<Integer> larger = new ArrayList<Integer>();
Integer chosenItem = items.get(items.size() / 2);
for (Integer i : items) {
if (i < chosenItem)
smaller.add(i);
else if(i > chosenItem)
larger.add(i);
else
same.add(i);
}
sort(smaller);
sort(larger);
items.clear();
items.addAll(smaller);
items.addAll(same);
items.addAll(larger);
}
}
//测试
public static void main(String[] s) {
//整型字符数组排序
List<Integer> items = new ArrayList<>();
items.add(1);
items.add(5);
items.add(2);
items.add(3);
items.add(4);
items.add(4);
items.add(2);
items.add(2);
items.add(5);
System.out.println("排序前:" + items);
SortTest.sort(items);
System.out.println("排序后:" + items);
}
}
控制台输出结果:
排序前:[1, 5, 2, 3, 4, 4, 2, 2, 5]
排序后:[1, 2, 2, 2, 3, 4, 4, 5, 5]