插入排序算法

思路

import java.util.Arrays;

/**
 * 插入排序思路
 * @author Scen
 * @date 2018/10/31 16:24
 */
public class Test {
    public static void main(String[] args) {
//        聲明一個數組
        int[] pokers = {100,10,9,8,3,2,1,4,5,6,7,1};
//        遍歷數組
        for (int i = 0; i < pokers.length-1; i++) {
//          默許第一個元素是已經排序好的,所以從第二個元素開始插入排序
            int temp = pokers[i+1];
//          數組角標爲i之前的元素是已經排序好的,所以將要進行插入排序的元素只需和之前的元素比大小並找到合適的位置插入
//          找到合適的位置插入操作的實現爲:符合條件則交換兩個元素的位置
//          遍歷之前的元素
            for (int j = 0; j <= i; j++) {
//              拿當前要進行排序的元素一一對比,符合條件的交換位置
                if (temp<pokers[j]) {
//                    把角標爲j的元素的值賦給當前正在進行排序的元素
//                    注意此處pokers[i + 1]的值可能已經經過了一次循環,值也已經改變,所以不可省略去用上面的temp的值
                    int t = pokers[i + 1];
                    pokers[i + 1] = pokers[j];
//                    把當前正在進行排序的元素的值賦給角標爲j的元素
//                    此處不可用上面的temp的值,要用t的
                    pokers[j] = t;
                }
            }
        }
        System.out.println(Arrays.toString(pokers));
    }
}

運行結果

[1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]

插入排序算法(java實現)

  • 插入排序對於少量的數據它是一個有效的算法。插入排序的工作方式像人手裏的撲克牌一樣。開始時我們手裏爲空並且桌子上的牌面向下。然後我們每次從桌上拿走一張牌並將它插入手裏正確的位置。爲了把這種牌插入正確的位置,我們要從右到左將它和已在手中的牌進行比較。如下圖:
    撲克牌排序
    InsertionSort.java
import java.util.Arrays;

/**
 * 插入排序算法java實現
 *
 * @author Scen
 * @date 2018/10/31 09:39
 */
public class InsertionSort {
    
    /**
     * 僞代碼
     * INSERTION-SORT(A)
     * for j = 2 to A.length
     *      key = A[j];
     * //Insert A[j] into the sorted sequence A[1...j-1]
     *      i = j - 1;
     *      while i > 0 and A[i] > key
     *              A[i+1] = A[i];
     *              i = i - 1;
     *      A[i+1] = key;
     * @param args
     */
    public static void main(String[] args) {
        int[] pokers = {5, 2, 1, 3, 4, 6};
        for (int j = 1; j < pokers.length; j++) {
            int key = pokers[j];
//            上一個元素
            int i = j - 1;
//            數組下標0開始所以>-1
            while (i > -1 && key < pokers[i]) {
                pokers[i + 1] = pokers[i];
                i -= 1;
            }
            pokers[i + 1] = key;
        }
        System.out.println(Arrays.toString(pokers));
    }
}

運行結果

[1, 2, 3, 4, 5, 6]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章