算法是小白,所以本着小白精神來寫排序,本排序系列均採用正序排序,可以使用一個統一的逆序方法。
什麼是選擇排序呢?從一個包含n個元素的數組A,索引分別爲0,1,2...n-1,從中選出最小值Ak,跟在索引爲0位置的元素交換,即Ak與A0交換位置,然後在剩下的n-1個元素中選出其中的最小值Ai,跟在索引爲1位置的元素交換,即Ai與A1交換位置,直到元素只剩下一個爲止。(PS.感覺好通俗)
public static void selectionSort(int[] array){
for(int i = 0; i < array.length-1; i++ ){
int min = i;
for (int j = i+1; j < array.length ; j++){
if (array[j]<array[min])
min = j;
}
if (min != i)
swap(array,i,min);
}
}
兩層循環,外層用於確定每個位置應該放的元素,內層用於求出子數組的最小值。定義min的原因是爲了我們能夠記住最小值所在的索引位置。如果對求數組最大值和最小值熟悉的話,應該知道可以參考我的博文java最值,以最小值爲例。注意,外層循環,循環n-1次即可,內層循環要循環n-i次。
public static void swap(int[] array, int i, int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
swap()方法,用來交換數組內的兩個元素,此方法一直通用於排序系列。
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {15,2,7,21,9,33,10};
for (int i = 0; i <array.length;i++){
System.out.print(array[i]+",");
}
System.out.println();
selectionSort(array);
for (int i = 0; i <array.length;i++){
System.out.print(array[i]+",");
}
}
主方法測試程序。