1. 程式人生 > >九大排序演算法之選擇排序(原理及實現)

九大排序演算法之選擇排序(原理及實現)

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));
        }

    }
}