1. public class InsertSortAlgorithm {
    2. public static void insertSort(int[] arr){
    3. //如果数组为null,或者数组为空或只有一个元素
    4. if (arr == null || arr.length < 2){
    5. return;
    6. }
    7. int n = arr.length;
    8. //0-1
    9. //0-2
    10. //0-3
    11. //0-n-1
    12. for (int end = 1; end <= n-1; end ++){
    13. int newValueIndex = end;
    14. //注意这里的newValue - 1 >= 0的条件经常性忘记,这里是保证插入数据的前一个数据位置存在,如果小于0就是说明位置不存在了
    15. while(newValueIndex -1 >= 0 && arr[newValueIndex] < arr[newValueIndex -1]){
    16. swap(arr, newValueIndex, newValueIndex-1);
    17. newValueIndex --;
    18. }
    19. }
    20. }
    21. //互换位置,将最小的数置前
    22. public static void swap(int[] arr, int i, int j){
    23. int temp = arr[i];
    24. arr[i] = arr[j];
    25. arr[j] = temp;
    26. }
    27. public static void printArr(int[] arr){
    28. for (int i=0; i < arr.length ; i++){
    29. System.out.print(arr[i] + " ");
    30. }
    31. System.out.println();
    32. }
    33. public static void main(String[] args) {
    34. int[] arr = {7, 2, 3, 8, 4, 1, 6, 1, 9};
    35. //排序前打印一次
    36. printArr(arr);
    37. //排序
    38. insertSort(arr);
    39. //排序后打印一次
    40. printArr(arr);
    41. }
    42. }

    注:插入算法的基数是围绕要插入的数来进行遍历排序的