java數(shù)據(jù)結(jié)構(gòu)與算法之簡單選擇排序詳解
本文實(shí)例講述了java數(shù)據(jù)結(jié)構(gòu)與算法之簡單選擇排序。分享給大家供大家參考,具體如下:
在前面的文章中已經(jīng)講述了交換類的排序算法,這節(jié)中開始說說選擇類的排序算法了,首先來看一下選擇排序的算法思想;
選擇排序的基本算法思想:
每一趟在 n-i+1 (i=1,2,3,……,n-1)個記錄中選取關(guān)鍵字最小的記錄作為有序序列中第i個記錄。
簡單選擇排序:
設(shè)所排序序列的記錄個數(shù)為n。i取1,2,…,n-1,從所有n-i+1個記錄(Ri,Ri+1,…,Rn)中找出排序碼最小的記錄,與第i個記錄交換。執(zhí)行n-1趟 后就完成了記錄序列的排序。
算法實(shí)現(xiàn)代碼如下:
package exp_sort; public class SimpleSelectSort { static int i; static int temp; public static void selectSort(int array[]) { for (i = 0; i < array.length; i++) { int k = i; //記錄當(dāng)前位置 for (int j = i + 1; j < array.length; j++) { if (array[j] < array[k]) { //找出最小的數(shù),并用k指向最小數(shù)的位置 k = j; } } //交換最小數(shù)array[k]與第i位上的數(shù) if (k != i) { temp = array[i]; array[i] = array[k]; array[k] = temp; } } } public static void main(String[] args) { // TODO Auto-generated method stub int array[] = { 38, 62, 35, 77, 55, 14, 35, 98 }; selectSort(array); for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } System.out.println("\n"); } }
算法分析:
在此排序過程中,需要移動記錄的次數(shù)比較少。最好情況下,即待排序記錄初始狀態(tài)就已經(jīng)是正序排列了,則不需要移動記錄;最壞情況下,即待排序記錄初始狀態(tài)是按照逆序排列的,則需要移動次數(shù)最多是:3(n-1)。排序過程中需要進(jìn)行的比較次數(shù)與初始狀態(tài)下待排序的記錄序列的排列情況無關(guān)。當(dāng)i=1時,需要進(jìn)行n-1次比較;當(dāng)i=n時,共需要進(jìn)行的比較次數(shù)是:n(n-1)/2,即比較操作的時間復(fù)雜度是:O(n^2),進(jìn)行移動操作的時間復(fù)雜度為O(n);該排序是不穩(wěn)定排序。
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
- java排序算法之_選擇排序(實(shí)例講解)
- java數(shù)據(jù)結(jié)構(gòu)排序算法之樹形選擇排序詳解
- Java 選擇排序、插入排序、希爾算法實(shí)例詳解
- Java實(shí)現(xiàn)的各種排序算法(插入排序、選擇排序算法、冒泡排序算法)
- Java實(shí)現(xiàn)選擇排序算法的實(shí)例教程
- Java經(jīng)典算法匯總之選擇排序(SelectionSort)
- Java對數(shù)組實(shí)現(xiàn)選擇排序算法的實(shí)例詳解
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:選擇排序 Selection Sort
- Java排序算法總結(jié)之選擇排序
- java實(shí)現(xiàn)選擇排序算法
- JAVA簡單選擇排序算法原理及實(shí)現(xiàn)
- java 合并排序算法、冒泡排序算法、選擇排序算法、插入排序算法、快速排序算法的描述
- Java排序算法之選擇排序
相關(guān)文章
Java實(shí)現(xiàn)文件和base64流的相互轉(zhuǎn)換功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)文件和base64流的相互轉(zhuǎn)換功能,涉及Java文件讀取及base64 轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Springmvc數(shù)據(jù)回顯實(shí)現(xiàn)原理實(shí)例解析
這篇文章主要介紹了Springmvc數(shù)據(jù)回顯實(shí)現(xiàn)原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09IDEA創(chuàng)建Maven項(xiàng)目后報錯不出現(xiàn)src文件夾的情況解決
最近剛開始學(xué)習(xí)maven,正準(zhǔn)備使用idea創(chuàng)建一個maven項(xiàng)目練手,卻發(fā)現(xiàn)自己創(chuàng)建的maven項(xiàng)目始終沒有src目錄,下面這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Maven項(xiàng)目后報錯不出現(xiàn)src文件夾的情況解決,需要的朋友可以參考下2023-05-05Java依賴-關(guān)聯(lián)-聚合-組合之間區(qū)別_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java依賴-關(guān)聯(lián)-聚合-組合之間區(qū)別理解,依賴關(guān)系比較好區(qū)分,它是耦合度最弱的一種,下文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2017-08-08Spring Boot如何配置內(nèi)置Tomcat的maxPostSize值
這篇文章主要介紹了Spring Boot如何配置內(nèi)置Tomcat的maxPostSize值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Spring Cloud Feign 自定義配置(重試、攔截與錯誤碼處理) 代碼實(shí)踐
這篇文章主要介紹了Spring Cloud Feign 自定義配置(重試、攔截與錯誤碼處理) 實(shí)踐,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Spring MVC+mybatis實(shí)現(xiàn)注冊登錄功能
這篇文章主要為大家詳細(xì)介紹了Spring MVC+mybatis實(shí)現(xiàn)注冊登錄功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07