首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 直接插入排序算法完整實現與泛型優化

     編輯:Java 程式設計入門

算法原理

直接插入排序將數組分為「已排序區」與「未排序區」,初始已排序區僅含首元素。每次從未排序區取首元素,在已排序區從右向左掃描,將大於該元素的值右移,騰出空位插入,時間複雜度 O(n²),穩定排序。

代碼架構

1. 交換工具類

public class Swapper {
    public static > void swap(int i, int j, T[] array) {
        T tmp = array[i]; array[i] = array[j]; array[j] = tmp;
    }
    public static void swap(int i, int j, int[] array) { ... }
}

2. 插入排序核心類

  • 單例模式 InsertionSortord.getInstance()
  • 提供 doSort(int...) 基礎類型版與 doSortT(T[]) 泛型版
  • 使用「哨兵」變量減少數組訪問,vacancy 記錄空位索引

核心邏輯片段

for (int i = 1; i < length; i++) {
    if (array[i] < array[i-1]) {
        int sentry = array[i];
        int vacancy = i;
        for (int j = i-1; j >= 0; j--) {
            if (array[j] > sentry) {
                array[j+1] = array[j];
                vacancy = j;
            }
        }
        array[vacancy] = sentry;
    }
}

3. 測試類

int[] arr = {3,5,4,2,6};
insertSort.doSort(arr);      // 基礎類型
Integer[] arr2 = {3,5,4,2,6};
insertSort.doSortT(arr2);    // 泛型

性能特徵與適用場景

優化方向

  • 二分查找插入位置 → 折半插入排序(比較次數降為 O(n log n),移動次數不變)
  • 希爾排序:分組插入,大幅減少移動操作
  • 小數組閾值切換:快排/歸併排序中小分區改用插入排序
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
指標值
時間複雜度最好 O(n),最差/平均 O(n²)
空間複雜度O(1)
穩定性穩定
適用場景小規模數據、近乎有序數組、教學演示