选择排序每次查找元素的最大值/最小值。
运行时间是n*n-1*n-2...*2*1 即O(n2),忽略常量
/** * @author: krauser * @date: Create in 下午10:07 2017/12/27 * @Description: 选择排序 * <p> * 运行时间N*(n-1)...*2*1 * 大O写法 O(n2) 省略了常数 */ public class SelectSortDemo { public List<Integer> selectSort(List<Integer> selectSort) { long start = System.currentTimeMillis(); selectSort = new LinkedList<>(selectSort); List<Integer> list = new ArrayList<>(); int length = selectSort.size(); for (int i = 0; i < length; i++) { Iterator<Integer> it = selectSort.iterator(); Integer max = null; while (it.hasNext()) { Integer value = it.next(); max = max == null ? value : max < value ? value : max; } it = selectSort.iterator(); while (it.hasNext()) { Integer value = it.next(); if (value.intValue() == max.intValue()) { it.remove(); break; } } list.add(max); } long end = System.currentTimeMillis(); System.out.println("处理" + length + "个元素,总共花费" + (end - start) + "ms"); return list; } public static void main(String[] args) { SelectSortDemo selectSortDemo = new SelectSortDemo(); List<Integer> list = new ArrayList<>(); for (int i = 0; i < 100000; i++) { Random random = new Random(); list.add(random.nextInt(1000)); } System.out.println("转换前:" + Arrays.toString(list.toArray())); list = selectSortDemo.selectSort(list); System.out.println("转换后:" + Arrays.toString(list.toArray())); } }