1.定義:
(1)找到陣列中最小的那個元素
(2)將它和陣列的第乙個元素交換位置(如果第乙個元素就是最小元素那麼它就和自己交換)
(3)在剩下的元素中找到最小的元素,將它與陣列的第二個元素交換位置
(4)如此以往,直到將整個陣列排序
總結,不斷地選擇剩餘元素之中的最小者,並放到剩餘元素的第乙個位置。
2.**剖析:
假設:陣列a,長度n,下標i
(1)這個演算法每次都只替換一組資料
(2)通過定義2、3,我們可知,其是從下標1開始,一直執行到下標n
(3)當下標是 i (1 <= i <= n)時,因為a[i]之前元素肯定是不大於a[i]的,所以我們只需要找到a [i]之後的元素中,小於a[i],且又在剩下的集合裡是最小的元素。找到之後,與a[i]交換位置即可
我們可以看到,當最後整個陣列都已經有序的情況下,演算法還在執行,所以這就是此演算法的缺陷之一吧,即前面的結果怎麼樣我不知道,我只知道我每次都要執行一遍,造成浪費。但優點是理解簡單,越無序的陣列,其展示的效能比越高。
4.按照這個思路,寫出**:
/**
* 選擇排序
* 排序過程:
* 1.找到陣列中最小的那個元素
* 2.將它和陣列的第乙個元素交換位置(如果第乙個元素就是最小元素那麼它就和自己交換)
* 3.在剩下的元素中找到最小的元素,將它與陣列的第二個元素交換位置
* 4.如此往復,直到整個陣列排序
** @param array
*/public static void choosesort(int array)
}//找到最小的數所在的索引之後,交換當前的數和最小的數
t = array[i];
array[i] = array[min];
array[min] = t;}}
5.演算法優劣分析:(1)對於長度為n的陣列,選擇排序需要大約n*n/2次比較和n次交換(2)執行時間和輸入無關。即每一次要找到最小的元素時,都需要重新迴圈一遍陣列,而不能利用到上一次掃瞄的結果。因此,可以發現,當乙個已經有序的陣列或者是元素值都相等的陣列和乙個元素隨機的陣列進行選擇排序時,它們消耗的時間是一樣的。
(3)資料移動量最小。選擇排序只用了n次交換,其交換次數和陣列的大小成線性關係。應該說是其他排序演算法裡,資料移動最小的。
6.資料引用:
《演算法algorithms(第4版)》 p155~p156
演算法 1 選擇排序演算法 java
簡介 選擇排序是乙個時間複雜度為o n 2 的基本排序演算法 當然也有其適用的場景 比如說該演算法的易於實現的特性 可應用於對某些實際問題的快速實現上.原理 從未排序的資料中 選出最小的資料 然後與未排序的第乙個資料進行比較交換操作 直到所有的資料都排好序.步驟 在未進行排序的資料中,尋找到最小的資...
java選擇排序演算法
選擇排序和氣泡排序差不多,只是氣泡排序在發現比它小的時候就交換,而選擇排序是只有在確定了最小的資料之後,才會發生交換。選擇排序的基本思想 第i趟簡單選擇排序是指通過n i次關鍵字的比較,從n i 1個記錄中選出關鍵字最小的記錄,並和第i個記錄進行交換。先臨時記錄其位置,只有在一趟 迴圈完以後確定了最...
排序演算法 1 選擇排序演算法
這篇部落格分為兩個部分 選擇排序演算法基本思想 實現與解析 由於這個排序演算法比較簡單,因此這篇博文就不做過多解釋了 一.選擇排序演算法基本思想 1 選擇排序 小到大排序 1.遍歷所有未排序的元素 找到最小的那個元素 2.將這個元素與未排序序列的第乙個元素交換位置 3.當剩下乙個元素時 排序結束 o...