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

九大排序演算法之插入排序(原理及實現)

1、演算法思路:每趟將一個待排序的元素作為關鍵字,按照其關鍵字值得大小插入到已經排好的部分的適當位置上,知道插入完成。

2、演算法過程

舉個栗子(第一趟的排序過程)

原始序列:49、38、65、97、76、13、27、49

1)開始以第一個元素49為關鍵字,看成一個序列,其餘數看成另一個序列,此時一個關鍵字數49序列是有序的。

結果:{49}   {38、65、97、76、13、27、49}

2)插入38。38<49,所以49向後移動一個位置,38插入到原49位置

結果:{38、49}   {65、97、76、13、27、49

}

3)插入65。65>49,所以不需要移動,65插入49之後

結果:{38、49、65}   {97、76、13、27、49}

4)插入97。97>65,所以不需要移動,97插入65之後

結果:{38、49、65、97}   {、13、27、49}

5)插入76。76<97,所以97向後移動一個位置,繼續比較,76>65,65不需要移動,76插入到65之後,97之前的位置

結果:{38、49、65、76、97}   {、13、27、49}

6)插入13。13<97,所以97向後移動一個位置,繼續比較,13>76,所以76向後移動一個位置不需要移動,繼續比較,13>65,逐次比較,發現13應插入最前位置

結果:{13、38、49、65、76、97}   {、27、49}

7)插入27。27<97,所以97向後移動一個位置,繼續比較,27>76,所以76向後移動一個位置不需要移動,繼續比較,27>65,逐次比較,發現27應插入13之後,38之前

結果:{13、27、38、49、65、76、97}   {、49}

8)最後插入剩餘元素49。同理逐次比較,發現49=49<65,應插入49之後,65之前位置

結果:{13、27、38、49、49、65、76、97}  

排序結束,得到一個有效序列

public class InsertionSort {
   public static void main(String[] args) {
        int [] arr = {49、38、65、97、76、13、27、49};   
        insertionSort(arr, arr.length);
    }
    public static void  insertionSort(int[] arr, int n) {
            int i, j, temp;
            for(i = 1; i < n; i++){
                temp = arr[i];
                for(j = i; j > 0 && arr[j - 1] > temp; j-- ){
                    arr[j] = arr[j - 1];
                }
                arr[j] = temp;
                System.out.println(Arrays.toString(arr));
            }
    }

}