選擇排序每次查找元素的最大值/最小值。
運行時間是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())); } }