数据结构与算法:直接插入排序(原理讲解+python实现)

数据结构与算法:直接插入排序(原理讲解+python实现)

直接插入排序

直接插入排序(Direct Insertion Sort) 是常见流行的排序算法之一。在大部分元素已经排好序的序列数组中,插入排序的优势得以体现。

排序原理

实际上是将要排序的数字列表分为有序表和无序表。有序表的数字都是有序的,而且规模逐个变大,从一个数字到列表长度的数字数目;无序表就是列表除去有序表剩下的数字,每次取第一个数字去与有序表中的数字做比较,并插入到有序表中正确的位置,无序表的规模逐个变小,最终全部取出,得到一个完整的有序表。

细节实现

数据结构与算法:直接插入排序(原理讲解+python实现)

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)