Java 十大排序算法之選擇排序刨析
選擇排序原理
①假設(shè)第一個索引處的元素為最小值,和其他值進行比較,如果當(dāng)前的索引處的元素大于其他某個索引處的值,則假定其他某個索引處的值為最小值,最后找到最小值所在的索引
②交換第一個索引處和最小值所在的索引處的值
選擇排序API設(shè)計
類名 | Selection |
構(gòu)造方法 | Selection():創(chuàng)建Selection對象 |
成員方法 |
1.public static void sort(Comparable[] a):對數(shù)組內(nèi)的元素進行排序 2.private static boolean greater(Comparable v,Comparable w):判斷v是否大于w 3.private static void exchange(Comparable[] a,int i,int j):交換a數(shù)組中,索引i和索引j處的值 |
選擇排序代碼實現(xiàn)
public class Selection { //對數(shù)組a中的元素進行排序 public static void sort(Comparable[] a){ for(int i=0;i<a.length-2;i++){ int minIndex=i; for(int j=i+1;j<a.length;j++){ if(greater(a[minIndex],a[j])){ minIndex=j; } } exchange(a,i,minIndex); } } private static boolean greater(Comparable v,Comparable w){ return v.compareTo(w)>0; } private static void exchange(Comparable[] a,int i,int j ){ Comparable t=a[i]; a[i]=a[j]; a[j]=t; } } class Test{ public static void main(String[] args) { Integer[] a={4,6,8,7,9,2,10,1}; Selection.sort(a); System.out.println(Arrays.toString(a)); } }
選擇排序的時間復(fù)雜度
選擇排序使用了雙層for循環(huán),外層循環(huán)完成了數(shù)據(jù)交換,內(nèi)層循環(huán)完成了數(shù)據(jù)比較,所以分別統(tǒng)計:數(shù)據(jù)比較次數(shù):(N-1)+(N-2)+(N-3)+...+2+1=
((N-1)+1)*(N-1)/2=N^2/2-N/2;
數(shù)據(jù)交換次數(shù):N-1;
時間復(fù)雜度: N^2/2-N/2+(N-1)=N^2/2+N/2-1;
根據(jù)大O推導(dǎo)法則,保留最高階項,去除常數(shù)因子,時間復(fù)雜度為O(N^2)
到此這篇關(guān)于Java 十大排序算法之選擇排序刨析的文章就介紹到這了,更多相關(guān)Java 選擇排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java基礎(chǔ)之選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)
- Java程序流程控制:判斷結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)原理與用法實例分析
- Java流程控制之循環(huán)結(jié)構(gòu)for,增強for循環(huán)
- Java流程控制之循環(huán)結(jié)構(gòu)while、do...while
- java循環(huán)結(jié)構(gòu)、數(shù)組的使用小結(jié)
- Java流程控制之選擇結(jié)構(gòu)
- java 排序算法之選擇排序
- Java選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)的使用詳解
相關(guān)文章
SpringBoot集成Druid實現(xiàn)多數(shù)據(jù)源的兩種方式
這篇文章主要介紹了SpringBoot集成Druid實現(xiàn)多數(shù)據(jù)源的兩種方式,集成com.baomidou的方式和基于AOP手動實現(xiàn)多數(shù)據(jù)源原生的方式,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下2024-03-03SpringBoot整合Redis實現(xiàn)token緩存
于token通常會被多次使用,我們需要把它保存到緩存中,以減少頻繁地訪問數(shù)據(jù)庫,本文主要介紹了SpringBoot整合Redis實現(xiàn)token緩存,感興趣的可以了解一下2024-02-02java socket接收保證能讀完數(shù)據(jù)的實例
這篇文章主要介紹了java socket接收保證能讀完數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10