排序算法圖解之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.在每趟排序時,都假定當(dāng)前位置的元素為最小值,如果在遍歷過程中發(fā)現(xiàn)有比當(dāng)前位置元素還小的值,則替換最小值。(先將最小值記錄,此趟遍歷完成再替換)
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; } //輸出每輪排序后的結(jié)果 System.out.println("第" + (i+1) + "趟: " + Arrays.toString(arr)); } } }
運行結(jié)果如下:
到此這篇關(guān)于排序算法圖解之Java選擇排序的文章就介紹到這了,更多相關(guān)Java選擇排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java foreach循環(huán)為什么不能賦值的講解
這篇文章主要介紹了java foreach循環(huán)為什么不能賦值的講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09reactor-logback的AsyncAppender執(zhí)行流程源碼解讀
這篇文章主要為大家介紹了reactor-logback的AsyncAppender執(zhí)行流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12spring-cloud入門之eureka-server(服務(wù)發(fā)現(xiàn))
本篇文章主要介紹了spring-cloud入門之eureka-server(服務(wù)發(fā)現(xiàn)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01Java利用apache ftp工具實現(xiàn)文件上傳下載和刪除功能
這篇文章主要為大家詳細介紹了Java利用apache ftp工具實現(xiàn)文件上傳下載、刪除功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06Java使用LinkedHashMap進行分數(shù)排序
這篇文章主要介紹了Java使用LinkedHashMap進行分數(shù)排序的相關(guān)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05SpringBoot+SpringBatch+Quartz整合定時批量任務(wù)方式
這篇文章主要介紹了SpringBoot+SpringBatch+Quartz整合定時批量任務(wù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09