
本文首發自「慕課網」,想了解更多IT干貨內容,程序員圈內熱聞,歡迎關注!
作者| 慕課網精英講師 JdreamZhang
(資料圖片僅供參考)
選擇排序(Select Sort),是計算機科學與技術領域中較為簡單的一種排序算法。
假設我們按照從小到大的順序進行排序。選擇排序會首先從待排序序列中選擇一個最小的元素放入排序好的序列中,然后依次在從未排序好的序列中選擇最小的元素,直到最后需要選擇的待排序序列中只有一個元素,只需要將這個元素放在最后位置,就完成了整個排序過程。
選擇排序的算法名稱的由來就是因為在排序的過程中,按照排序規則(升序或者降序),依次從待排序的序列中選擇出需要排列的元素。越小或者越大的元素會先選擇出來,直至完成整個排序。
在介紹完選擇排序之后,我們一起來看一下選擇排序的實現步驟具體是什么樣的吧。這里我們假設待排序的序列為 [9,2,11,7,12,5],我們按照從小到大的序列進行排序。
在待排序的序列中找到最小的元素,將最小元素與排序序列中首位元素交換位置;
偽代碼實現如下:
//待排序的序列記為A,尋找最小元素的偽代碼如下:min = A[0]for(int i=1;i步驟 2: 從剩余的未排序序列中,繼續找出一個最小元素,將最小元素與排序好的序列的下一個位置進行交換;
步驟 3:重復步驟 2的工作,直至排序完成。
其實,選擇排序主要是靠步驟 2的重復執行,他會每次把最小的元素先選擇出來,然后放在排序好的序列的尾部。接下來,讓我們用上面的待排序數字序列 [9,2,11,7,12,5] 進行整個算法步驟的排序演示工作。
1.2 算法演示
按照 2.1 節的排序步驟,首先我們會找出排序數字序列 [9,2,11,7,12,5] 中的最小元素 2,將 2 看作是排序好的元素,放在排序好的序列首位,如下:
[9,2,11,7,12,5] --> [2,9,11,7,12,5] //找出待排序序列中最小元素2,放在首位,所以與9交換了位置代碼塊1接著,步驟 2,步驟 3的描述,我們重復進行最小元素的選擇工作,整個過程如下:
[2,9,11,7,12,5] --> [2,5,11,7,12,9] //找出[9,11,7,12,5]中最小元素5,然后與9交換位置[2,5,11,7,12,9] --> [2,5,7,11,12,9] //找出[11,7,12,9]中最小元素7,然后與11交換位置[2,5,7,11,12,9] --> [2,5,7,9,12,11] //找出[11,12,9]中最小元素9,然后與11交換位置[2,5,7,9,12,11] --> [2,5,7,9,11,12] //找出[12,11]中最小元素11,然后與12交換位置[2,5,7,9,11,12] --> [2,5,7,9,11,12] //最后一個元素12,已經在排序好的位置上,排序完成代碼塊12345步驟 2會依次從待排序的序列中選擇一個最小的元素出來,然后將最小元素與排序好的序列的下一個位置的元素進行互換。重復整個步驟 2,直至最后待排序序列只剩下一個元素,最后一個元素已經排序好,說明整個排序過程結束。
Tips:步驟 2中每次執行選擇一個最小的元素時,都會在未排序序列的內部進行一次比較篩選,記錄下最小元素的位置,當遍歷完成整個待排序序列之后,就可以確定最小元素的位置,將最小元素與已排序好序列的下一個元素進行位置互換,就完成了一個選擇最小元素的過程。
從上面的示例可以看出,其實整個選擇排序的過程,每次都會去在未排序序列的內部進行一次選擇,找出最小的元素,將未排序序列中最小元素放在排序好的序列的下一位置。重復執行這個過程,就可以完成排序。
2. Java 代碼實現
在說明選擇排序的整個過程之后,接下來,我們看看如何用 Java 代碼實現選擇排序算法。
import java.util.Arrays;public class SelectSort { public static void main(String[] args) { //初始化需要排序的數組 int array[] = {9, 2, 11, 7, 12, 5}; //依次進行選擇排序,每次找出最小的元素,放入待排序的序列中 for(int i=0;i運行結果如下:
[2, 5, 7, 9, 11, 12]代碼塊1代碼中的第 7 行初始化一個需要排序的數組,后面按照從小到大的排序規則,實現了數組的排序。第 10 行是外層 for 循環,不斷地重復選擇排序工作。第 17 行是內層循環,不斷地實現每一次 “選擇 “,在未排序的序列中找出最小的元素和對應數組中的位置。第 24 至第 27 行實現了將未排序好的序列中的最小元素與需要排序的位置的元素進行交換的功能。第 31 行打印出排序好的數組。
3. 小結
本篇文章主要給大家介紹了選擇排序算法,需要大家熟悉選擇排序的算法流程,知道選擇排序算法的實現思路,可以自己用代碼實現選擇排序算法。希望大家可以比較一下不同排序算法的實現思路,自己多總結思考。
歡迎關注「慕課網」,發現更多IT圈優質內容,分享干貨知識,幫助你成為更好的程序員!