選擇排序也是一種簡單直覺的排序算法。它的工作原理很容易了解:初始時在序列中找到最小(大)元素,放到序列的起始位置作為已排序序列;然後,再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
注意選擇排序與冒泡排序的差別:冒泡排序通過依次交換相鄰兩個順序不合法的元素位置,進而将目前最小(大)元素放到合适的位置;而選擇排序每周遊一次都記住了目前最小(大)元素的位置,最後僅需一次交換操作即可将其放到合适的位置。
package cn.com.sort;
import org.junit.Test;
public class Select {
@Test
public void selectSort(){
int a[] = { 8, 5, 2, 6, 9, 3, 1, 4, 0, 7 }; // 從小到大選擇排序
int n = a.length;
for(int i=0;i<n-1; i++){// i為已排序序列的末尾
int min = i;//标記
for(int j=i+1;j<n;j++){
if(a[j] < a[min]){//後一個數與前面一個數比較,找出最小值
min = j;
}
}
if(min != i){// 放到已排序序列的末尾,該操作很有可能把穩定性打亂,是以選擇排序是不穩定的排序算法
int temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
for(int i=0;i<n;i++){
System.out.println(a[i]);
}
}
}