小白排序之選擇排序

算法是小白,所以本着小白精神來寫排序,本排序系列均採用正序排序,可以使用一個統一的逆序方法。

什麼是選擇排序呢?從一個包含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]+",");
		}
	}
主方法測試程序。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章