選擇排序

選擇排序每次查找元素的最大值/最小值。

運行時間是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()));

    }

}


發佈了36 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章