排序算法圖解之Java選擇排序
1.選擇排序簡介
選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是:第一次從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┑囊粋€元素,存放在序列的起始位置,然后再從剩余的未排序元素中尋找到最小(大)元素,然后放到已排序的序列的末尾。以此類推,直到全部待排序的數(shù)據(jù)元素的個數(shù)為零。選擇排序是不穩(wěn)定的排序方法。

2.圖解選擇排序算法
選擇排序的基本思想如下:
第一次:從arr[0]~arr[n-1]中選取最小值,與arr[0]進行交換;
第二次:從arr[1]~arr[n-1]中選取最小值,與arr[1]進行交換;
第三次:從arr[2]~arr[n-1]中選取最小值,與arr[2]進行交換;
…
第 i 次:從arr[i]~arr[i-1]中選取最小值,與arr[i]進行交換;
總共通過n-1次,可以得到從小到大的有序序列。
以序列:{8, 3, 2, 1, 7, 4, 6, 5} 為例!分步驟圖解如下:

思路說明:
1.在每趟排序時,都假定當前位置的元素為最小值,如果在遍歷過程中發(fā)現(xiàn)有比當前位置元素還小的值,則替換最小值。(先將最小值記錄,此趟遍歷完成再替換)
2.選擇排序一共有數(shù)組大小-1趟排序。
3.選擇排序代碼實現(xiàn)
import java.util.Arrays;
/**
* @author 興趣使然黃小黃
* @version 1.0
* 選擇排序
*/
public class SelectSort {
public static void main(String[] args) {
int[] array = {8, 3, 2, 1, 7, 4, 6, 5};
System.out.println("排序前: " + Arrays.toString(array));
selectSort(array);
System.out.println("排序后: " + Arrays.toString(array));
}
//選擇排序
public static void selectSort(int[] arr){
//選擇排序過程
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i; //假定最小索引,最小值為第一個元素
int min = arr[minIndex];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]){
//更新最小值
min = arr[j];
minIndex = j;
}
}
//將最小值放進arr[i]
if (i != minIndex){
arr[minIndex] = arr[i];
arr[i] = min;
}
//輸出每輪排序后的結果
System.out.println("第" + (i+1) + "趟: " + Arrays.toString(arr));
}
}
}
運行結果如下:

到此這篇關于排序算法圖解之Java選擇排序的文章就介紹到這了,更多相關Java選擇排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java foreach循環(huán)為什么不能賦值的講解
這篇文章主要介紹了java foreach循環(huán)為什么不能賦值的講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
reactor-logback的AsyncAppender執(zhí)行流程源碼解讀
這篇文章主要為大家介紹了reactor-logback的AsyncAppender執(zhí)行流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
spring-cloud入門之eureka-server(服務發(fā)現(xiàn))
本篇文章主要介紹了spring-cloud入門之eureka-server(服務發(fā)現(xiàn)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
Java利用apache ftp工具實現(xiàn)文件上傳下載和刪除功能
這篇文章主要為大家詳細介紹了Java利用apache ftp工具實現(xiàn)文件上傳下載、刪除功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06
Java使用LinkedHashMap進行分數(shù)排序
這篇文章主要介紹了Java使用LinkedHashMap進行分數(shù)排序的相關代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
SpringBoot+SpringBatch+Quartz整合定時批量任務方式
這篇文章主要介紹了SpringBoot+SpringBatch+Quartz整合定時批量任務方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

