直接插入排序
直接插入排序(Direct Insertion Sort) 是常见流行的排序算法之一。在大部分元素已经排好序的序列数组中,插入排序的优势得以体现。
排序原理
实际上是将要排序的数字列表分为有序表和无序表。有序表的数字都是有序的,而且规模逐个变大,从一个数字到列表长度的数字数目;无序表就是列表除去有序表剩下的数字,每次取第一个数字去与有序表中的数字做比较,并插入到有序表中正确的位置,无序表的规模逐个变小,最终全部取出,得到一个完整的有序表。
细节实现
Python实现
1 def dInsertionSort(arr, n): # 传入要排序数字列表和列表长度 2 for i in range(1, n): # 将列表第1个元素作为有序表、第2到第n-1个元素作为无序表 3 if arr[i] < arr[i-1]: # 如果无序表中第一个元素比有序表中最大元素要小 则需要插入到有序表中 4 tmp = arr[i] 5 j = i-1 6 while (j >= 0 and arr[j] > tmp): 7 arr[j+1] = arr[j] 8 j -= 1 9 # 当无序表中第一个元素比完有序表中所有元素都没有比它还小的(j<0) 10 # 或者它大于有序表中某个位置的数字,则将其放在当前位置的+1位置 11 arr[j+1] = tmp 12 13 if __name__ == '__main__': 14 arr = [20, 30, 10, 60, 50, 40] 15 n = len(arr) 16 dInsertionSort(arr, n) 17 print(arr)