1. 程式人生 > 其它 >Java插入排序

Java插入排序

Java插入排序

/**
 * 插入排序
 *
 * @author yl
 */
public class InsertSort {

    public static void main(String[] args) {
        int[] ints = {7, 5, 3, 8};
        System.out.println(Arrays.toString(insertSort(ints)));
    }

    /**
     * 插入排序演算法
     * 類似整理撲克牌,比如有左手有一副牌1,2,4,7 ,來一張3的牌, 是不是就是手拿著這張牌從右往左插到2,4之間
     * 一次插入排序的操作過程:
     * 將待插元素,依次與已排序好的子數列元素從後到前進行比較,如果當前元素值比待插元素值大,則將移位到與其相鄰的後一個位置
     * 否則直接將待插元素插入當前元素相鄰的後一位置,因為說明已經找到插入點的最終位置
     *
     * @param ints
     * @return
     */
    public static int[] insertSort(int[] ints) {
        if (ints.length >= 2) {
            // 預設ints[0]已經排好序
            for (int i = 1; i < ints.length; i++) {
                // 要排序的數
                int target = ints[i];
                // 排序目標前一個數的下標
                int j = i - 1;
                // 當排序目標比前一個數小,執行排序操作
                while (j >= 0 && ints[j] > target) {
                    // 將排序目標的前一個數往右移動一位
                    ints[j + 1] = ints[j];
                    // 繼續跟前面的數比較
                    j--;
                }
                // 將排序目標插入到目標位置,由於while迴圈裡面j--了,所以目標位置要加1
                ints[j + 1] = target;
            }
        }

        return ints;
    }


}
記得快樂