1. 程式人生 > >演算法之路__2、選擇排序

演算法之路__2、選擇排序

一、解釋

選擇排序法事實上 是對 定位比較交換法(也就是氣泡排序法) 的一種改進。

基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。

從以上的 演算法思想中可以看出,選擇排序是選待排記錄中最小的一個放在左側, 而上一篇博文中寫到的冒泡是從待排記錄中選擇最大的放在右側。

示例:

初始序列:{49 27 65 97 76 12 38}
  第1趟:12與49交換:12{

27 65 97 76 49 38}
  第2趟:27不動 :12 27{65 97 76 49 38}
  第3趟:65與38交換:12 27 38{97 76 49 65}
  第4趟:97與49交換:12 27 38 49{76 97 65}
  第5趟:76與65交換:12 27 38 49 65{97 76}
  第6趟:97與76交換:12 27 38 49 65 76 97 完成

二、程式碼

	public static void selectionSort(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		//確定待排區域
		for (int i = 0; i < arr.length - 1; i++) {
			//指標變數minIndex 表示最小元素下標 以當前位置開始
			int minIndex = i;
			//從當前位置的下一個開始遍歷 
			//比minIndex位置元素小則 將小位置元素下標設定為minIndex
			for (int j = i + 1; j < arr.length; j++) {
				minIndex = arr[j] < arr[minIndex] ? j : minIndex;
			}
			//將當前位置元素與最小位置元素交換
        		int tmp = arr[i];
        		arr[i] = arr[minIndex];
        		arr[minIndex] = tmp;
		}
	}