iQOO 8 全球首發 E5 高亮發光材料,2K 螢幕解析度
阿新 • • 發佈:2021-08-05
簡介
插入排序,一般也被稱為直接插入排序。對於少量元素的排序,它是一個有效的演算法 [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; } } }