選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第乙個[5]與[3]交換,導致第乙個5挪動到第二個5後面)。
選擇排序的原理:
對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面"後乙個元素"現變成了"前乙個元素",繼續跟他的"後乙個元素"進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第乙個元素的下標,就讓第乙個元素跟他交換一下值,這樣就找到整個陣列中最小的數了。然後找到陣列中第二小的數,讓他跟陣列中第二個元素交換一下值,以此類推。
1.時間複雜度
比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+...+1=n*(n-1)/2。交換次數o(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。
2.穩定性
選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的,在剩餘元素裡面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇,如果乙個元素比當前元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是乙個不穩定的排序演算法。
//從待排序數字,後面找到比待排序數字小的數字就發生交換一直到整個序列遍歷完
void selectsort(int *arr,int len)
} }}
c語言選擇排序 選擇排序法 C語言
直接選擇排序的基本思想 n個記錄的直接選擇排序可經過 n 1 趟直接選擇排序得到有序結果。初始狀態 無序區為 a 1.n 有序區為空。第 1 趟排序 在無序區 a 1.n 中選出最小的記錄a k 將它與無序區的第 1 個記錄 a 1 交換,使 a 1 1 和 a 2.n 分別變為記錄個數增加1的新有...
選擇排序(C語言)
採用先確定位置然後找數字的方法。選定位置或者在最前或者在最後。把選定位置上的數字和所有其他數字做順序調整直到把合適數字放在選定位置上。插入排序 include void insert sort int p num,int size int num 0,num1 0,tmp 0 for num 1 n...
選擇排序(C語言)
以公升序為例 選取陣列第0個位置為最小的元素的位置,將該位置元素依次和陣列剩餘元素做比較,將最小者放入位置0 重複步驟1,依次填充陣列第1 第2個元素 直到最後乙個元素為止。以下為 實現 include include include define arraysize x sizeof x size...