插入排序

插入排序

代码#

import java.util.Arrays;

public class InsertionSort {
    public static void main(String[] args) {
        int[] numbers = { 3, 1, 4, 2, 6, 5 };
        System.out.println("排序前的数组为:" + Arrays.toString(numbers));
        // 外层循环控制排序轮数
        for (int i = 1; i < numbers.length; i++) {
            // 临时变量存储当前要比较的值
            int temp = numbers[i];
            int j = 0;
            for (j = i - 1; j >= 0; j--) {
                if (numbers[j] > temp) {
                    numbers[j + 1] = numbers[j];
                } else {
                    break;
                }
            }
            if (numbers[j + 1] != temp) {
                numbers[j + 1] = temp;
            }
        }
        System.out.println("排序后的数组为:" + Arrays.toString(numbers));
    }
}

输出效果为:

排序前的数组为:[3, 1, 4, 2, 6, 5]

排序后的数组为:[1, 2, 3, 4, 5, 6]

释义#

插入排序,一开始将第一个待排序序列看做有序序列,余下的为未排序序列。从头到尾扫描未排序序列,将所选元素与有序序列中的元素比较,插入适当位置。

以[3, 1, 4, 2, 6, 5]为例。
第一轮排序:
[3, 1, 4, 2, 6, 5] temp = 1初始
[3, 3, 4, 2, 6, 5] temp = 11比3小,将3后移
[1, 3, 4, 2, 6, 5] temp = 1第一轮结束,将temp值赋值给本来3的位置。

第二轮排序:
[1, 3, 4, 2, 6, 5] temp = 4初始
[1, 3, 4, 2, 6, 5] temp = 44比3大,肯定比3之前的元素大,循环结束

第三轮排序:
[1, 3, 4, 2, 6, 5] temp = 2初始
[1, 3, 4, 4, 6, 5] temp = 22比4小,将4后移
[1, 3, 3, 4, 6, 5] temp = 22比3小,将3后移
[1, 3, 3, 4, 6, 5] temp = 22比1大,结束
[1, 2, 3, 4, 6, 5] temp = 2第三轮结束,将temp值赋值给3的位置

第四轮排序:
[1, 2, 3, 4, 6, 5] temp = 6初始
[1, 2, 3, 4, 6, 5] temp = 66比4大,肯定比4之前的元素大,循环结束

第五轮排序:
[1, 2, 3, 4, 6, 5] temp = 5初始
[1, 2, 3, 4, 6, 6] temp = 55比6小,6后移
[1, 2, 3, 4, 6, 6] temp = 55比4大,结束
[1, 2, 3, 4, 5, 6] temp = 5第三轮结束,将temp值赋值给6的位置

五轮排序结束得到最终序列。
易知,若有N个待排序元素,共需排序N-1轮。每轮排序向前比较,直至找到合适位置为止。

总结#

插入排序是一种稳定的排序算法。
平均时间复杂度:O(n²)
最坏时间复杂度:O(n²)
最好时间复杂度:O(n)
空间复杂度:O(1)

posted @   isxh  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
主题色彩