Java 十大排序算法之選擇排序刨析
選擇排序原理
①假設(shè)第一個索引處的元素為最小值,和其他值進行比較,如果當前的索引處的元素大于其他某個索引處的值,則假定其他某個索引處的值為最小值,最后找到最小值所在的索引
②交換第一個索引處和最小值所在的索引處的值
選擇排序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)文章
Java Volatile關(guān)鍵字實現(xiàn)原理過程解析
這篇文章主要介紹了Java Volatile關(guān)鍵字實現(xiàn)原理過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下2020-03-03
springBoot項目中使用@Value取值出現(xiàn)的問題及解決
這篇文章主要介紹了springBoot項目中使用@Value取值出現(xiàn)的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
SpringBoot+MyBatis-Plus實現(xiàn)分頁功能
在SpringBoot項目中,結(jié)合MyBatis-Plus(簡稱MP)可以非常方便地實現(xiàn)分頁功能,MP為開發(fā)者提供了分頁插件PaginationInterceptor,只需簡單配置即可使用,本文給大家介紹了SpringBoot+MyBatis-Plus實現(xiàn)分頁功能,文中通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下2024-01-01
spring整合redis消息監(jiān)聽通知使用的實現(xiàn)示例
在電商系統(tǒng)中,秒殺,搶購,紅包優(yōu)惠卷等操作,一般都會設(shè)置時間限制,本文主要介紹了spring整合redis消息監(jiān)聽通知使用,具有一定的參考價值,感興趣的可以了解一下2021-12-12

