插入排序(insertion sort)

直接插入排序java

    

排序過程如上圖(圖非原創)數組

該排序原理以下:緩存

       將一個擁有n個元素的待排序的數據序列R數組當成兩個序列(自己仍是一個序列),一個有序序列,一個無序序列。剛開始時,有序序列中只有一個元素,也就是R[0],而無序序列中則是R[1]到R[n-1]。而後每次拿出無序序列中第一個元素,此時是R[1],將其與有序序列中的最後一位數字做比較,若是無序序列中的第一個元素<有序序列中的最後一個元素,說明此時要對該數字進行排序。而排序的操做則是將無序序列中的第一個元素進行緩存到變量temp,而後與有序序列中的最後一個元素比較,若是temp比有序序列中的最後一個元素小,那麼將有序序列的最後一個元素向後移動一位,而後接着拿有序序列中的前一位與temp比較,直到找到這個數值(temp)合適的位置,而後將該數值直接插入到該位置上。因此叫作直接插入排序。
code

具體代碼以下:排序

public int[] sort(int[] sort) {
        int temp;                              // 監視哨,也就是緩存即將用於比較的數字
        int i, j;
        // 從數組第2個數字開始與前一個數字比較
        for (i = 1; i < sort.length; i++) {
            if (sort[i] < sort[i - 1]) {
                temp = sort[i];                 // 將要進行插入的數字緩存
                // 查找這個數字的適當位置
                // 將緩存的數字temp與有序序列中最後一位數字依次向前進行比較,
                // 若是它比有序序列中的數字小,那麼將有序序列中的那個數字向後移一位,
                // 不然該位置就是temp元素應該在的位置,那麼插入該數字便可。
                for (j = i ; j > 0 && sort[j-1] > temp; j--) {
                    sort[j] = sort[j-1];
                }
                sort[j] = temp;
            }
        }
        return sort;
    }
相關文章
相關標籤/搜索