直接選擇排序(Straight Select Sorting) 也是一種簡單的排序方法,它的基本思想是:第一次從R[0]R[n-1]中選取最小值,與R[0]交換,第二次從R[1]R[n-1]中選取最小值,與R[1]交換,…,第i次從R[i-1]R[n-1]中選取最小值,與R[i-1]交換,…,第n-1次從R[n-2]R[n-1]中選取最小值,與R[n-2]交換,總共通過n-1次,得到一個按排序碼從小到大排列的有序序列。
代碼實現(java)
public void selectSortselSort(int a[]){
for (int i = 0; i < a.length; i++) {
int tmp = a[i];//存儲遍歷時最小的值
int flag = i;//存儲最小值的位置
for(int j = i+1;j<a.length;j++){
if(a[j]<tmp){
//找到更小的值,將值和位置存儲起來
tmp = a[j];
flag = j;
}
}
int tmp2 = a[i];//臨時保存a[i]的值,用於交換值得位置
a[i] = tmp;
a[flag] = tmp2;
}
}
在直接選擇排序中,共需要進行n-1次選擇和交換,每次選擇需要進行 n-i 次比較 (1<=i<=n-1),而每次交換最多需要3次移動,因此,總的比較次數C=(n*n - n)/2,由此可知,直接選擇排序的時間複雜度爲 O(n^2) ,所以當記錄佔用字節數較多時,通常比直接插入排序的執行速度快些。
由於在直接選擇排序中存在着不相鄰元素之間的互換,因此,直接選擇排序是一種不穩定的排序方法。