1. 原理
每次從陣列元素中選出最小(或最大)的乙個元素,存放在已經排序好序列的起始位置(或者末尾位置),直到全部待排序的元素排完。2. 思路
第一趟排序,在待排序資料arr[1],arr[2]…arr[n]選取最小的資料,將其與arr[1]進行交換;3. **實現第二趟排序,在待排序資料arr[2],arr[3]…arr[n]選取最小的資料,將其與arr[2]進行交換;
…如此繼續,第i趟在待排序資料arr[i],arr[i + 1]…arr[n]中選取最小的元素與arr[i]進行交換,直至全部完成排序。
/**
* 選擇排序實現
*/public static void sort(int param)
// 最小元素位置只需要在前面的length - 2就可以
for (int i = 0; i < param.length - 1; i++) }}
}public static int generaterandomarray(int size, int value)
return arr;
}public static void main(string args)
}
4. 演算法分析時間複雜度:選擇排序的交換操作介於0和(n - 1)次之間。選擇排序的比較操作為0和n(n - 1) / 2。選擇排序的賦值操作介於0和3(n - 1)此之間。所以時間複雜度為o(n^2),比較次數與元素的初始狀態無關,總的比較次數n = (n - 1) + (n - 2)+…+ 1 = n*(n -1)/2,交換次數o(n),如果元素為正序,交換0次,最壞情況交換n - 1次,逆序交換n/2次。交換次數比氣泡排序少得多,由於交換所需cpu時間比比較時間所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。演算法穩定性:選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇乙個最小的元素,在剩餘元素裡面給第二個元素選擇第二個最小的,依次類推,直到第n - 1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇中,如果乙個元素比當前元素小,而該小元素又出現在乙個與當前元素相等的元素後面,那麼交換後穩定性就被破壞了,舉個例子,序列5 8 5 2 9,第一遍選擇第乙個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是乙個不穩定演算法。
面試題總結 html面試題)
附上鏈結 doctype 的作用是什麼?宣告一般位於文件的第一行,它的作用主要是告訴瀏覽器以什麼樣的模式來解析文件。一般指定了之後會以標準模式來 進行文件解析,否則就以相容模式進行解析。在標準模式下,瀏覽器的解析規則都是按照最新的標準進行解析的。而在相容模式下,瀏 覽器會以向後相容的方式來模擬老式瀏...
1 面試題 排序演算法總結
一 排序 1.冒泡 排序 原生 var arr 5,4,3,2,1 for var i 0 i 第一次迴圈比較輪數 for var j 0 j 第2次迴圈比較次數 if arr j arr j 1 呼叫api 如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說得更精確點,是按照字元...
(程式設計師面試題)選擇排序
選擇排序是除了氣泡排序之後又一最基本的排序演算法,具體演算法小弟表達能力有限,為了不誤導大家,請自行wiki,此處僅貼出 include int main void int i,j int min,tmp,cur 0 for i 0 i 9 i tmp num i num i num min num...