1. 程式人生 > 資訊 >iQOO 8 全球首發 E5 高亮發光材料,2K 螢幕解析度

iQOO 8 全球首發 E5 高亮發光材料,2K 螢幕解析度

簡介
插入排序,一般也被稱為直接插入排序。對於少量元素的排序,它是一個有效的演算法 [1] 。插入排序是一種最簡單的排序方法,它的基本思想是將一個記錄插入到已經排好序的有序表中,從而一個新的、記錄數增1的有序表。在其實現過程使用雙層迴圈,外層迴圈對除了第一個元素之外的所有元素,內層迴圈對當前元素前面有序表進行待插入位置查詢,並進行移動。
基本思想
把n個待排序的元素看成為一個有序表和一個無序表,開始時有序表中只包含一個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,把它的排序碼依次與有序表元素的排序碼進行比較,將它插入到有序表中的適當位置,使之成為新的有序表。
時間複雜度


平均時間複雜度和最壞時間複雜度都是O(n²)
程式碼

public static void test () {
    int[] arr = {5,1,10,7,-2};
    //第一輪,無序表中已經有資料5
    int value = arr[1];
    int index = 0;
    while (index >= 0 && value < arr[index]) {
      arr[index + 1] = arr[index];
      index--;
    }
    //value的值比下標為index的數大,就放在它的後面
    arr[index + 1] = value;
    System.out.println("第一次排序=======");
    System.out.println(Arrays.toString(arr));

    //第二輪,無序表中已經有資料1,5
    value = arr[2];
    index = 1;
    while (index >= 0 && value < arr[index]) {
      arr[index + 1] = arr[index];
      index--;
    }
    //value的值比下標為index的數大,就放在它的後面
    arr[index + 1] = value;
    System.out.println("第二次排序=======");
    System.out.println(Arrays.toString(arr));

    //第三輪,無序表中已經有資料1,5,10
    value = arr[3];
    index = 2;
    while (index >= 0 && value < arr[index]) {
      arr[index + 1] = arr[index];
      index--;
    }
    //value的值比下標為index的數大,就放在它的後面
    arr[index + 1] = value;
    System.out.println("第三次排序=======");
    System.out.println(Arrays.toString(arr));

    //第四輪,無序表中已經有資料1,5
    value = arr[4];
    index = 3;
    while (index >= 0 && value < arr[index]) {
      arr[index + 1] = arr[index];
      index--;
    }
    //value的值比下標為index的數大,就放在它的後面
    arr[index + 1] = value;
    System.out.println("第四次排序=======");
    System.out.println(Arrays.toString(arr));
  }


以上程式碼可以簡寫為:

 public static void insertSort (int[] arr) {
    int value;
    int index;
    for (int i = 1; i < arr.length; i++) {
      value = arr[i];
      index = i - 1;
      while (index >= 0 && value < arr[index]) {
        arr[index + 1] = arr[index];
        index--;
      }
      if (index + 1 != i) {
        arr[index + 1] = value;
      }
    }
  }