牛叔叔 的笔记

好好学习

2024-09-22 14:04

插入排序

牛叔叔

JavaEE

(412)

(0)

收藏

插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到的额外空间的排序),因而在从后向前扫描过程中,找到排序位置后,需要将已排序元素逐步向后挪位,为最新元素提供插入空间。

下面是Java中插入排序的一个实现示例,并附有详细的注释:

public class InsertionSort {
    public static void main(String[] args) {
        int[] arr = {12, 11, 13, 5, 6};
        insertionSort(arr);
        System.out.println("Sorted array: ");
        printArray(arr);
    }

    // 插入排序算法
    static void insertionSort(int arr[]) {
        int n = arr.length;
        for (int i = 1; i < n; ++i) {
            // 选择要插入的元素
            int key = arr[i];
            int j = i - 1;

            /* 将大于key的元素向后移动一个位置 */
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            arr[j + 1] = key; // 插入key到正确的位置
        }
    }

    // 辅助方法,用于打印数组
    static void printArray(int arr[]) {
        int n = arr.length;
        for (int i = 0; i < n; ++i)
            System.out.print(arr[i] + " ");
        System.out.println();
    }
}

代码解析

  1. 初始化:首先,我们设定一个循环从数组的第二个元素开始(索引为1,因为单个元素默认已排序),因为第一个元素前面没有其他元素,所以不需要进行任何操作。

  2. 选择键(key):在每次循环中,我们选择当前要排序的元素作为键(key),这里是arr[i]

  3. 向后移动元素:然后,我们将当前元素与它之前的元素进行比较(即arr[j],其中ji-1开始递减),如果前面的元素比当前元素大,我们就将该元素向后移动一个位置(即arr[j+1] = arr[j])。

  4. 插入键:当我们找到第一个不大于key的元素时,或者当我们已经到达数组的开头(j < 0),我们就在那个位置插入key(即arr[j+1] = key)。

  5. 重复:这个过程一直重复,直到数组被完全排序。

  6. 打印结果:排序完成后,我们使用一个辅助方法printArray来打印排序后的数组。

插入排序的平均时间复杂度和最坏时间复杂度都是,其中是数组的长度。尽管它不是最高效的排序算法,特别是对于大数据集,但由于其简单性和在某些情况下的良好性能(如小数据集或基本有序的数据集),它仍然被广泛使用。


0条评论

点击登录参与评论