java實現幾種常用排序:選擇排序
阿新 • • 發佈:2019-01-09
一.選擇排序介紹
選擇排序,顧名思義就是用逐個選擇的方式來進行排序,逐個選擇出陣列中的最大(或最小)的元素,直到選擇至最後一個元素。此時陣列完成了排序。
二.選擇排序原理分析
三.選擇排序程式碼實現
/** * @Author {LearnAndGet} * @Time 2019年1月8日 * @Discription:選擇排序 */ package com.sort; import java.util.Arrays; public class ChooseSort { static int[] array = {3,2,4,1,5,0}; public static void chooseSort(int[] a) { int max = 0; int index = 0; //外層迴圈,控制選擇的次數,陣列長度為6,一共需要選擇5次 for(int i=0;i<a.length-1;i++) { for(int j=0;j<a.length-i;j++) { if(max < a[j]) { max = a[j]; index = j; } } //每次選擇完成後,max中存放的是該輪選出的最大值 //將max指向位置的元素和陣列最後一個元素位置互換 int temp = a[a.length-i-1]; a[a.length-i-1] = max; a[index] = temp; //清空max和index,便於下次 max=0; index =0; System.out.println("經過第"+(i+1)+"輪選擇後,陣列為"+Arrays.toString(a)); } } public static void main(String[] args) { chooseSort(array); } }
四選擇排序程式碼優化
因為選擇排序過程中,每一輪選擇出最大的元素並將它和陣列最後一位互換位置,那麼即使在某一輪的選擇過程中,未發生位置互換,此時也不能說明陣列已經排序完成,假設陣列: 2 1 3 4 5 進行升序排列
第一輪選擇後,陣列序列為:2 1 3 4 5
第二輪選擇後,陣列序列為:2 1 3 4 5
第三輪選擇後,陣列序列為:2 1 3 4 5
第四輪選擇後,陣列序列為:1 2 3 4 5
可以看到,即使前三輪的選擇過程中,都沒有發生陣列元素互換,但是此時陣列仍未排序完成,直到第4輪選擇完成後,陣列才完成了排序。因此選擇排序並不能優化。
五.選擇排序時間複雜度
計算時間複雜度時,預設計算最複雜的情況下需要進行的次數:比如將陣列:5 4 2 1 3進行升序排列:
- 第一輪選擇排序:一共需要進行4次比較。可以將5和3互換,得到:3 4 2 1 5
- 第二輪選擇排序:一共需要進行3次比較。可以將4和1互換,得到:3 1 2 4 5
- 第三輪選擇排序:一共需要進行2次比較。可以將3和2互換,得到:2 1 3 4 5
- 第四輪選擇排序:一共需要進行1次比較。可以將2和1互換,得到:1 2 3 4 5
可以看到,對陣列長度為5進行排序,需要進行比較的次數為4+3+2+1=10次。若陣列長度為n,那麼進行比較的次數為(n-1)+(n-2)+(n-3)+...1 = n * (n - 1) / 2,當n足夠大時,n * (n - 1) / 2約等於n*n。
綜上所述,選擇排序的時間複雜度為:O(n²)