簡(jiǎn)單選擇排序是一種選擇排序。
選擇排序:每趟從待排序的記錄中選出關(guān)鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結(jié)束為止。
簡(jiǎn)單排序處理流程
(1)從待排序序列中,找到關(guān)鍵字最小的元素;
(2)如果最小元素不是待排序序列的第一個(gè)元素,將其和第一個(gè)元素互換;
(3)從余下的 N - 1 個(gè)元素中,找出關(guān)鍵字最小的元素,重復(fù)(1)、(2)步,直到排序結(jié)束。
如圖所示,每趟排序中,將當(dāng)前第 i 小的元素放在位置 i 上。
核心代碼
publicvoidselectionSort(int[]list){//需要遍歷獲得最小值的次數(shù)//要注意一點(diǎn),當(dāng)要排序N個(gè)數(shù),已經(jīng)經(jīng)過N-1次遍歷后,已經(jīng)是有序數(shù)列for(inti=0;ilist[j]){index=j;}}//將找到的第i個(gè)小的數(shù)值放在第i個(gè)位置上temp=list[index];list[index]=list[i];list[i]=temp;System.out.format("第%d趟: ",i+1);printAll(list);}}算法分析
簡(jiǎn)單選擇排序算法的性能
時(shí)間復(fù)雜度
簡(jiǎn)單選擇排序的比較次數(shù)與序列的初始排序無關(guān)。 假設(shè)待排序的序列有 N 個(gè)元素,則比較次數(shù)總是N (N - 1) / 2。
而移動(dòng)次數(shù)與序列的初始排序有關(guān)。當(dāng)序列正序時(shí),移動(dòng)次數(shù)最少,為 0.
當(dāng)序列反序時(shí),移動(dòng)次數(shù)最多,為3N (N - 1) / 2。
所以,綜合以上,簡(jiǎn)單排序的時(shí)間復(fù)雜度為O(N2)。
空間復(fù)雜度
簡(jiǎn)單選擇排序需要占用 1 個(gè)臨時(shí)空間,在交換數(shù)值時(shí)使用。
完整參考代碼
JAVA版本
代碼實(shí)現(xiàn)
1packagenotes.javase.algorithm.sort;23importjava.util.Random;45publicclassSelectionSort{67publicvoidselectionSort(int[]list){8//需要遍歷獲得最小值的次數(shù)9//要注意一點(diǎn),當(dāng)要排序N個(gè)數(shù),已經(jīng)經(jīng)過N-1次遍歷后,已經(jīng)是有序數(shù)列10for(inti=0;ilist[j]){17index=j;18}19}2021//將找到的第i個(gè)小的數(shù)值放在第i個(gè)位置上22temp=list[index];23list[index]=list[i];24list[i]=temp;2526System.out.format("第%d趟: ",i+1);27printAll(list);28}29}3031//打印完整序列32publicvoidprintAll(int[]list){33for(intvalue:list){34System.out.print(value+" ");35}36System.out.println();37}3839publicstaticvoidmain(String[]args){40//初始化一個(gè)隨機(jī)序列41finalintMAX_SIZE=10;42int[]array=newint[MAX_SIZE];43Randomrandom=newRandom();44for(inti=0;i
運(yùn)行結(jié)果
排序前:3528120841第1趟:0528123841第2趟:0128523841第3趟:0118523842第4趟:0112583842第5趟:0112283845第6趟:0112238845第7趟:0112234885第8趟:0112234588第9趟:0112234588排序后:0112234588
-
算法
+關(guān)注
關(guān)注
23文章
4576瀏覽量
92339 -
代碼
+關(guān)注
關(guān)注
30文章
4695瀏覽量
68081 -
排序
+關(guān)注
關(guān)注
0文章
31瀏覽量
9693
原文標(biāo)題:排序算法總結(jié)(6):簡(jiǎn)單選擇排序
文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論