簡單選擇排序是一種選擇排序。
選擇排序:每趟從待排序的記錄中選出關(guān)鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結(jié)束為止。
簡單排序處理流程
(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);}}算法分析
簡單選擇排序算法的性能
時(shí)間復(fù)雜度
簡單選擇排序的比較次數(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。
所以,綜合以上,簡單排序的時(shí)間復(fù)雜度為O(N2)。
空間復(fù)雜度
簡單選擇排序需要占用 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文章
4699瀏覽量
94773 -
代碼
+關(guān)注
關(guān)注
30文章
4887瀏覽量
70268 -
排序
+關(guān)注
關(guān)注
0文章
32瀏覽量
9821
原文標(biāo)題:排序算法總結(jié)(6):簡單選擇排序
文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
調(diào)制解調(diào)器和積分器算法程序的詳細(xì)資料概述

TI的基于DSP兼容的第三方算法協(xié)議的詳細(xì)資料概述

Stellaris系列產(chǎn)品的選擇詳細(xì)資料概述

9013流水燈的介紹和設(shè)計(jì)詳細(xì)資料概述

常用的非比較排序算法:計(jì)數(shù)排序,基數(shù)排序,桶排序的詳細(xì)資料概述

PID程序算法的詳細(xì)資料概述免費(fèi)下載
SV601187的詳細(xì)資料合集包括了電路圖,原理圖和介紹等詳細(xì)資料概述

如何使用萬用表簡單判斷旋轉(zhuǎn)編碼器?的詳細(xì)資料概述
幾種c語言程序的排序包括應(yīng)用程序等資料免費(fèi)下載

C語言教程之如何選擇結(jié)構(gòu)程序設(shè)計(jì)的詳細(xì)資料概述

數(shù)碼管跑馬燈實(shí)驗(yàn)的目標(biāo)和流程圖及程序的詳細(xì)資料概述

FPGA視頻教程之FPGA開發(fā)流程的詳細(xì)資料概述

圖論算法及MATLAB程序代碼的詳細(xì)資料說明

評(píng)論