【算法知识】详解选择排序算法
基本思想
選擇排序的思想是:? ? ?
給定一個數組arr,其長度為n; ? ? ? ?
第一次從 arr[0] 到 arr[n-1] 中選取一個最值(按照需求,可以是最大值,可以是最小值,下同)與arr[0]進行交換; ? ? ? ? ? ?
第二次從arr[1] 到 arr[n-1] ?中選取一個最值與arr[1]進行交換;?
以此類推,直到arr[n-2]到arr[n-1]中選出最值交換后即完成排序。(只剩下一個元素,前面的都是比它小(或者大)的)。
例子
給定數組 arr 為 [ 300, 50 , 120 , 110 ];? ?
則其初始狀態(tài)為:? ?
定義兩個變量minIndex、min,分別表示最小值元素的索引,和最小值元素的值。? ?
先假定最小值元素為循環(huán)開始的第一個元素。?
第一次循環(huán)將minIndex、min分別賦值為 0和300。?
循環(huán)變量為當前元素的下一個元素的索引。? ?
由圖來演示算法過程:? ?
黃色表示當前循環(huán)需要遍歷的元素。
第一趟排序
第一趟排序狀態(tài)1此時 50 ?< min當前值300,將minIndex賦值為1,將min賦值為50;
第一趟排序狀態(tài)2循環(huán)變量向后移動。第一趟排序狀態(tài)3
此時 120 ?> min當前值50,循環(huán)變量直接向后移動;
第一趟排序狀態(tài)4此時 110 ?> min當前值50,循環(huán)變量無法向后移動,當前循環(huán)結束。
minIndex不等于循環(huán)開始前的首元素的索引0,發(fā)生交換。
第一趟排序狀態(tài)5第二趟排序
第二趟排序狀態(tài)1此時 120 ?> min當前值100,循環(huán)變量直接向后移動;
第二趟排序狀態(tài)2此時 120 ?> min當前值110,循環(huán)變量向后移動則會發(fā)生越界,當前循環(huán)結束。
minIndex等于循環(huán)開始前的首元素的索引1,不發(fā)生交換。
第三趟排序
第三趟排序狀態(tài)1此時 110 ?< min當前值120,將minIndex賦值為3,將min賦值為110;
第三趟排序狀態(tài)2循環(huán)變量再向后移動則會發(fā)生越界,當前循環(huán)結束。
minIndex不等于循環(huán)開始前的首元素的索引2,發(fā)生交換。
第三趟排序狀態(tài)3因為前n-1個元素均排序完畢,所以原數組排序完畢。
我們由例子可知:
選擇排序的趟數為數組長度-1
代碼
由上面的講解知道要寫成雙重循環(huán),最終代碼如下:
import?java.util.Arrays;public?class?Solution?{public?static?void?main(String[]?args)?{int?[]?arr?=?new?int[]{300,50,120,110};System.out.println("排序前的數組"?+?Arrays.toString(arr));selectSort(arr);System.out.println("排序前的數組"?+?Arrays.toString(arr));}public?static?void?selectSort(int[]?arr){int?minIndex;//最小值元素索引int?min;//最小值元素for?(int?i?=?0;?i?<?arr.length?-?1;?i++)?{minIndex?=?i;min?=?arr[i];for?(int?j?=?i?+?1;?j?<?arr.length;?j++)?{if?(min?>?arr[j])?{min?=?arr[j];minIndex?=?j;}}//交換if?(minIndex?!=?i)?{arr[minIndex]?=?arr[i];arr[i]?=?min;}}} }時間復雜度
比較次數與關鍵字的初始狀態(tài)無關,總的比較次數N=(n-1)+(n-2)+…+1= 。為 。
穩(wěn)定性
選擇排序是不穩(wěn)定的排序算法。?
舉個例子來說明:? ?
序列 6 9 6 3 10 ? ? ?
在第一趟排序時第一個6會和3交換位置,那么原序列中兩個6的相對前后順序就被破壞了。? ?
所以選擇排序是一個不穩(wěn)定的排序算法。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優(yōu)惠券,請回復“知識星球”喜歡文章,點個在看 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的【算法知识】详解选择排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习实战】意大利Covid-19病
- 下一篇: 【科普】一文把数据科学、人工智能与机器学