【基础排序】插入排序

选择排序是每次选择出最小的放到已经排好的数组后面,而插入排序是依次选择一个元素,插入到前面已经排好序的数组中间,确保它处于正确的位置,当然,这是需要已经排好的顺序数组不断移动。步骤描述如下:

1.从第一个元素开始,假设认为第一个元素已经排好顺序。
2. 取出后面一个元素 n,在前面已经排好顺序的数组里从尾部往头部遍历,假设正在遍历的元素为 nums[i],如果 num[i] > n,那么将 nums[i] 移动到后面一个位置,直到找到已经排序的元素小于或者等于新元素的位置,将 n 放到新腾空出来的位置上。如果没有找到,那么 nums[i] 就是最小的元素,放在第一个位置。
3. 重复上面的步骤 2,直到所有元素都插入到正确的位置。

 

package sort;

public class InsertionSort {
    public static void printf(int[] nums) {
        for (int num : nums) {
            System.out.print(num + " ");
        }
        System.out.println("");
    }

    public static void insertionSort(int[] nums) {
        if(nums == null) {
            return;
        }

        int size = nums.length;
        int index, temp;
        for(int i = 1;i < size;i++) {
            // 当前选择插入的元素前面一个索引值
            index = i - 1;
            // 当前需要插入的元素
            temp = nums[i];
            while(index >= 0 && nums[index] > temp) { // 前面数据比后边的要大.
                nums[index + 1] = nums[index];
                index--;
            }
            // 插入空出来的位置
            nums[index + 1] = temp;
            //System.out.print("第" + (i) + "轮插入结果:");
            printf(nums);
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[]nums = new int[]{98,90,34,56,21};
        printf(nums);
        insertionSort(nums);
    }

}
View Code

引用链接:https://www.cnblogs.com/yyyyfly1/p/15773593.html

 

posted @ 2022-04-07 18:27  v大喵  阅读(74)  评论(0编辑  收藏  举报