九大排序演算法之選擇排序(原理及實現)
1、演算法思想:選擇排序,從頭至尾掃描序列,找出最小的一個元素,和第一個元素交換,接著從剩下的元素中繼續這種選擇和交換方式,最終得到一個有序序列。
2、演算法過程
舉個栗子(第一趟的排序過程)
原始序列:49、38、65、97、76、13、27、49
1)在進行選擇排序過程中分成有序和無序兩個部分,開始都是無序序列
結果:49、38、65、97、76、13、27、49
2)從無序序列中取出最小的元素13,將13同無序序列第一個元素交換,此時產生僅含一個元素的有序序列,無序序列減一
結果:{13、} {38、65、97、76、49、27、49}
3)從無序序列中取出最小的元素27,將27同無序序列第一個元素交換,此時產生僅兩個元素的有序序列,無序序列減一
結果:{13、27、} {65、97、76、49、38、49}
4)從無序序列中取出最小的元素38,將38同無序序列第一個元素交換,此時產生含三個元素的有序序列,無序序列減一
結果:{13、27、38、} {97、76、49、65、49}
5)從無序序列中取出最小的元素49,將49同無序序列第一個元素交換,此時產生含四個個元素的有序序列,無序序列減一
結果:{13、27、38、49、} {76、97、65、49}
6)從無序序列中取出最小的元素49,將49同無序序列第一個元素交換,此時產生含五個元素的有序序列,無序序列減一
結果:{13、27、38、49、49、} {97、65、76}
7)從無序序列中取出最小的元素65,將65同無序序列第一個元素交換,此時產生含六個元素的有序序列,無序序列減一
結果:{13、27、38、49、49、65} {97、76}
8)從無序序列中取出最小的元素76,將76同無序序列第一個元素交換,此時產生含七個元素的有序序列,無序序列減一
結果:{13、27、38、49、49、65、76、} {97}
9)最後一個元素肯定是最大元素,無序排序直接生產一個有序的序列
結果:{13、27、38、49、49、65、76、97}
public class SelectSort { public static void main(String[] args) { int [] arr = {49,38,65,97,76,13,27,49}; selectSort(arr,arr.length); } public static void selectSort(int [] arr,int n){ for (int i = 0; i < n - 1; i++) { int index = i; int j; // 找出最小值得元素下標 for (j = i + 1; j < n; j++) { if (arr[j] < arr[index]) { index = j; } } int tmp = arr[index]; arr[index] = arr[i]; arr[i] = tmp; System.out.println(Arrays.toString(arr)); } } }