基於Java實現的選擇排序算法


選擇排序和冒泡排序同樣是基礎排序算法,現在也做個學習積累。

簡述

選擇排序算法較為穩定,基本上都是O(n2)的時間復雜度,規模越小排序越快,不需要占用額外空間。其實選擇排序原理很簡單,就是在未排序序列中找到最小(大)的元素然后放到數組前面,然后再從剩下的未排序序列中找到最小(大)的元素放在上一次找到最小(大)元素的后面,以此類推完成排序。

動圖演示

看下動圖上的演示,就能夠找出排序規律,非常之簡明易懂。

(算法動圖來源於參考資料,詳細請往下翻閱)

代碼實現

 1 /**
 2  * 選擇排序
 3  * @param array 待排序數組
 4  * @return 已排序數組
 5  */
 6 public static int[] selectionSort(int[] array) {
 7     int len = array.length;
 8     // 如果數組長度為0或者1,都是不用排序直接返回
 9     if(len == 0 || len == 1) {
10         return array;
11     }
12     for(int i = 0; i < len - 1; i++) {
13         int minIdx = i;
14         for(int j = i + 1; j < len; j++) {
15             // 找到最小的數
16             if(array[minIdx] > array[j]) {
17                 // 保存最小數的索引
18                 minIdx = j;
19             }
20         }
21         // 如果一輪比較下來都沒有變更最小值的索引則無需調換順序
22         if(minIdx != i) {
23             int tmp = array[i];
24             array[i] = array[minIdx];
25             array[minIdx] = tmp;
26         }
27     }
28     return array;
29 }

算法分析

最佳情況:T(n) = O(n2 最差情況:T(n) = O(n2)  平均情況:T(n) = O(n2)

由此看出,選擇算法的排序情況是很穩定的,不管輸入什么樣的數據都是一樣的時間復雜度。

參考資料

1、https://www.cnblogs.com/guoyaohua/p/8600214.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM