原理:第一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小(大)元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。
工具類
邏輯**public
class
utils
}//用於交換陣列兩個下標的位置
static
void
swap
(int
arrs,
int x,
int y)
}
1.演示圖:public
class
selectionsort
;for
(int i =
0; i < arrs.length -
1; i++
)//當最小值下標變化了才進行交換
if(minpos != i)
//列印陣列
utils.
printarr
(arrs);}
}}

改進版:只需迴圈n/2次
總結public
class
selectionsortsuper
;int minpos;
//儲存最小元素的小標
int maxpos;
//儲存最大元素的小標
int len = arrs.length;
//只需要跑n/2趟即可
for(
int i =
0; i < len /
2; i++
)else
if(arrs[j]
> arrs[maxpos])}
//當最小值下標變化時,將最小值與前面的值交換
if(minpos != i)
}//因為最大值都要放到後面,當最大值遍歷後就是最後位置時是不需要變化的,所以要進行重新定位
// 只有當將最大值下標不為最後下標時,最大值與後面的值才進行交換
if(maxpos != len -
1- i)
system.out.
("第"
+(i +1)
+"次排序結果:");
utils.
printarr
(arrs)
; system.out.
println()
;}}}
時間複雜度(平均)
時間複雜度(最好)
時間複雜度(最壞)
空間複雜度
穩定性o(n²)
o(n²)
o(n²)
o(1)
不穩定
十大排序演算法之選擇排序
選擇排序也是一種o n 2 時間複雜度的排序演算法,選擇排序是每一次迴圈都將找到最小值,依次將最小值 次小值分別從左至右進行排序。以下是具體實現過程,其中使用的工具類這篇部落格已經給出,import cn.zjut.util.sorttestutil public class selectsort ...
十大排序演算法
1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...
十大排序演算法
排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...