舞动算法:插入排序
插入排序原理
-
从第二个元素开始和前面的元素进行比较,如果前面的元素比当前元素大,则将前面元素 后移,当前元素依次往前,直到找到比它小或等于它的元素插入在其后面。
-
然后选择第三个元素,重复上述操作,直到最后一个元素。
插入排序特点
时间复杂度:插入排序同样需要两次循坏一个一个比较,故时间复杂度也为O(n^2)
空间复杂度:只需要常数个辅助单元,所以空间复杂度也为O(1)
不明白?跳个舞吧【https://www.bilibili.com/video/BV1xW411Y73Z?t=95】
def insertion_sort(arr): # 获取列表长度 length = len(arr) # 从第二个元素开始,即下标为 1 的元素,进行比较 for i in range(1, length): # 将当前值作为一个临时变量存储,用于值的比较交换 temp = arr[i] # 获得当前值的前一个元素的下标 pre_index = i - 1 # 判断前一个元素是否存在,并将它和当前值进行大小比较 while pre_index >= 0 and arr[pre_index] > temp: # 前一个元素值 大于 当前值时 # 将该前一个元素值,向后移一位,进行值的覆盖 arr[pre_index + 1] = arr[pre_index] # 向前,再获取下一个元素的下标 pre_index -= 1 # 当前一个元素值 小于 temp这个比较值时,temp会插入在这个元素值后面 arr[pre_index + 1] = temp return arr def insertion_sort2(arr): # 获取列表长度 length = len(arr) for i in range(1, length): # 设置当前值前一个元素的标识 j = i - 1 # 如果当前值小于前一个元素,则将当前值作为一个临时变量存储,将前一个元素后移一位 if arr[i] < arr[j]: temp = arr[i] arr[i] = arr[j] # 继续往前寻找,如果有比临时变量大的数字,则后移一位,直到找到比临时变量小的元素或者达到列表第一个元素 j = j-1 while j >= 0 and arr[j] > temp: arr[j + 1] = arr[j] j = j-1 # 将临时变量赋值给合适位置 arr[j + 1] = temp return arr list_1 = [5, 3, 4, 2, 1] print(insertion_sort2(list_1))
从现在开始,种下梦想中的参天大树