跳到主要内容

编写Java代码实现直接插入排序 ?

参考答案:

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

以下是一个Java实现的直接插入排序算法:

public class InsertionSort {
    public static void main(String[] args) {
        int[] arr = {4, 3, 2, 10, 12, 1, 5, 6};
        insertionSort(arr);
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }

    public static void insertionSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int key = arr[i];
            int j = i - 1;

            /* Move elements of arr[0..i-1], that are
               greater than key, to one position ahead
               of their current position */
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            arr[j + 1] = key;
        }
    }
}

这段代码首先定义了一个整数数组arr,然后使用insertionSort函数对其进行排序。在insertionSort函数中,对于数组中的每个元素,我们都将其视为"key",并将其与前面的元素进行比较。如果前面的元素大于key,我们就将其向后移动一位,然后继续比较下一个元素,直到找到key的正确位置并将其插入。

注意,这个算法的时间复杂度在最坏和平均情况下都是O(n^2),其中n是数组的长度。尽管它的效率不如一些更高级的排序算法(如快速排序、归并排序等),但它对于小数组或者部分有序的数组来说是一个很好的选择,因为它的实现简单且易于理解。