Java 插入排序之直接插入排序

142 阅读1分钟

Java 插入排序之直接插入排序

  • 直接插入排序是一种简单直观的插入排序算法,属于比较类排序,把要排序的数组分为已排序和未排序两部分,每次从未排序部分取出第一个元素(称为 key),插入到已排序部分的适当位置,直到所有元素已排序
  • 默认将数组的第一个元素视为已排序部分,其余元素为未排序部分
  • 直接插入排序易于理解和实现,适合小规模或部分有序的数据
  • 时间复杂度:平均 O(n^2) 最好 O(n) 最坏 O(n^2)
  • 空间复杂度:O(1)
  • 稳定性:稳定
/**
待排序: 3 5 1 7 6 2 4
第 1 轮:3 5 1 7 6 2 4 剩余 1 7 6 2 4
第 2 轮:1 3 5 7 6 2 4 剩余 7 6 2 4
第 3 轮:1 3 5 7 6 2 4 剩余 6 2 4
第 4 轮:1 3 5 6 7 2 4 剩余 2 4
第 5 轮:1 2 3 5 6 7 4 剩余 4
第 6 轮:1 2 3 4 5 6 7
...
*/
public static void main(String[] args) {
    int[] arr = {3, 5, 1, 7, 6, 2, 4};
    //外层循环从第 2 个元素开始遍历
    for (int i = 1; i < arr.length; i++) {
        int key = arr[i]; //当前待插入元素 key
        int j = i - 1; //已排序部分的最后 1 个元素索引
        //从后向前比较,找到插入位置并移动元素(将已排序部分中比 key 大的元素后移)
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        //插入元素 key
        arr[j + 1] = key; 
    }
    //
    System.out.println("排序后的数组:");
    for (int num : arr) {
        System.out.print(num + " ");
    }
}
//---------------------------------
排序后的数组:
1 2 3 4 5 6 7