用Python 学习数据结构与算法 五、插入排序&二分查找

来源:互联网 发布:js同步和异步的理解 编辑:程序博客网 时间:2024/05/16 18:06

与普通插入排序不同的是,使用二分查找法找到合适位置再移动过往值。

上代码:

#coding=utf-8def InsertionBinarySearch(array):    nLength = len(array)    for x in range(1, nLength):        #记录需要安放的值和下标        key = array[x]        index = x        #将key安放到pos下标处        leftPos = 0        rightPos = index        mPos = index // 2        while mPos >= 0:            #print(array, array[mPos], (leftPos, rightPos, mPos), key)            #左右坐标相同退出查找            if leftPos == rightPos:                break            #查找的位置值大于需要排的值            if array[mPos] > key:                #不进行rightPos - 1是因为最后一个元素不需要排序                rightPos = mPos                mPos = (leftPos + rightPos) // 2            #小于            elif array[mPos] < key:                leftPos = mPos + 1                mPos = (leftPos + rightPos) // 2            #等于            else:                break        #将pos原数组向后移一位        while index >= rightPos:            #print((index, array[index]), (rightPos, array[index - 1]))            array[index] = array[index - 1]            index = index - 1        array[rightPos] = keyA = [5, 2, 4, 6, 1, 2, 3]InsertionBinarySearch(A)print(A)

输出结果:

[1, 2, 2, 3, 4, 5, 6]

原本代码错错的,晕晕乎乎的改改,结果改对了….

0 0
原创粉丝点击