1. 程式人生 > >排序(一):選擇排序

排序(一):選擇排序

一、步驟
1、找到陣列中的最小元素;
2、將第一步找到的最小元素與陣列第一個元素交換位置(如果第一個元素就是最小元素則和自己交換);
3、在剩下的元素中找到最小元素,將它與第二個元素交換位置。如此反覆,直到將整個陣列排序。

二、優缺點
1、執行時間和輸入無關。為了找出最小的元素而掃描一遍陣列並不能為下一次掃描提供什麼資訊。這種性質在某些情況下是缺點,因為一個有序的陣列或是主鍵全部相等的陣列和一個元素隨機排列的陣列所用的排序時間是一樣的。
2、資料移動最少。假設長度為N的陣列,每次交換都會改變兩個陣列元素的值,因此選擇排序用了N次交換,交換次數跟N成線性關係。而大多數其他演算法增長數量級都是線性對數或者平方級別。

三、實現

public <T> void sort(Comparable<T>[] arr) {
        for(int i=0;i<arr.length;i++) {
            int min = i;

            for(int j=i+1;j<arr.length;j++) {
                if(less(arr[j], arr[min])) {//下標為j的元素是否小於下標為min的元素
                    min = j;
                }
            }

            exch(arr, i, min
);//下標為i的和下標為min的元素互換位置 } }