日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法知识】详解选择排序算法

發(fā)布時間:2025/3/8 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法知识】详解选择排序算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基本思想

選擇排序的思想是:? ? ?
給定一個數(shù)組arr,其長度為n; ? ? ? ?
第一次從 arr[0] 到 arr[n-1] 中選取一個最值(按照需求,可以是最大值,可以是最小值,下同)與arr[0]進行交換; ? ? ? ? ? ?
第二次從arr[1] 到 arr[n-1] ?中選取一個最值與arr[1]進行交換;?
以此類推,直到arr[n-2]到arr[n-1]中選出最值交換后即完成排序。(只剩下一個元素,前面的都是比它小(或者大)的)。

例子

給定數(shù)組 arr 為 [ 300, 50 , 120 , 110 ];? ?
則其初始狀態(tài)為:? ?

初始狀態(tài)

定義兩個變量minIndexmin,分別表示最小值元素的索引,和最小值元素的值。? ?
先假定最小值元素為循環(huán)開始的第一個元素。?
第一次循環(huán)將minIndexmin分別賦值為 0300。?
循環(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)結(jié)束。

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)結(jié)束。

minIndex等于循環(huán)開始前的首元素的索引1,不發(fā)生交換。

第三趟排序

第三趟排序狀態(tài)1

此時 110 ?< min當前值120,將minIndex賦值為3,將min賦值為110;

第三趟排序狀態(tài)2

循環(huán)變量再向后移動則會發(fā)生越界,當前循環(huán)結(jié)束。

minIndex不等于循環(huán)開始前的首元素的索引2,發(fā)生交換。

第三趟排序狀態(tài)3

因為前n-1個元素均排序完畢,所以原數(shù)組排序完畢。

我們由例子可知:
選擇排序的趟數(shù)為數(shù)組長度-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("排序前的數(shù)組"?+?Arrays.toString(arr));selectSort(arr);System.out.println("排序前的數(shù)組"?+?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;}}} }

時間復雜度

比較次數(shù)與關(guān)鍵字的初始狀態(tài)無關(guān),總的比較次數(shù)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位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的【算法知识】详解选择排序算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。