赞
踩
插入排序很类似于已有一副有序的扑克牌,不断地通过值比较,将新的扑克牌插入到有序的扑克牌中(通过将新的扑克牌和有序的扑克牌进行比较)。
插入排序在代码实现上可能和冒泡有点像,但从算法的时间复杂度上分析,插入排序会优于冒泡排序。插入排序在遇到如
[
1
,
2
,
3
,
4
,
5
,
6
]
[1, 2, 3, 4, 5, 6]
[1,2,3,4,5,6]这种数据排列时,时间复杂度是常数项
选择排序和冒泡排序的时间复杂度都是
O
(
n
2
)
O(n^2)
O(n2),这两种排序算法都是与数据排列无关的。在遇到上述那种数据排列时,还是会执行
n
2
n^2
n2次
def swap(arr, i, j): temp = arr[i] arr[i] = arr[j] arr[j] = temp if __name__ == '__main__': arr = [6, 3, 1, 4, 2, 5] print("原数组:", arr) for i in range(1, len(arr)): for j in range(i, 0, -1): if arr[j] >= arr[j - 1]: continue else: swap(arr, j, j - 1) print("排序后的数组:", arr)
在一个有序数组中,找某个数是否存在
在一个有序数组中,通过不断将数组二分来寻找最小值。
if __name__ == '__main__': arr = [6, 3, 1, 4, 2, 5] print("原数组:", arr) arr = sorted(arr) print("排序后的数组:", arr) fN = 4 low = 0 high = len(arr) - 1 print("想要找的数为:", fN) while True: mid = int((low + high) / 2) if mid == low or mid == high: print("数不存在") break if arr[mid] == fN: flag = True print("数存在,位于数组的第", mid, "位") break; elif arr[mid] > fN: high = mid - 1 elif arr[mid] < fN: low = mid + 1
在一个有序数组中,找>=某个数最左侧的位置
和普通二分很类似,就是一点点的差异
if __name__ == '__main__': arr = [6, 3, 1, 4, 2, 5] print("原数组:", arr) arr = sorted(arr) print("排序后的数组:", arr) fN = 4 low = 0 high = len(arr) - 1 print("想要找的数为:", fN) while True: if low > high: print("想要找的数最左侧位于数组的第", low, "位") mid = int((low + high) / 2) if mid == low or mid == high: print("数不存在") break if arr[mid] >= fN: high = mid - 1 elif arr[mid] < fN: low = mid + 1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。