插入排序算法

思路

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]
点赞