一.選擇排序介紹
選擇排序,顧名思義就是用逐個選擇的方式來進行排序,逐個選擇出數組中的最大(或最小)的元素,直到選擇至最后一個元素。此時數組完成了排序。

二.選擇排序原理分析

三.選擇排序代碼實現
/**
* @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²)
