希尔排序是插入排序的升级版,回忆插入排序,当拿到一张新的扑克牌,我们需要拿着它逐一与手中的牌比较。当这张新的扑克牌恰好是最小的,那意味着手里有多少张牌就要移动多少次,所以插入排序的时间复杂度跟原数组的有序程度紧密相连。
为了提高插入排序的效率,算法专家考虑是否能先把数组变得相对有序一些,尽量先把数组中较大的和较小的分别放置在数组的末尾和开头,这样比较的次数就会下降很多。
1 | # Python program for implementation of Shell Sort |
对比插入排序,其实代码的差别不大,只不过把代码中的1换成了gap:
1 | def insert_sort(array): |