什么是" j- = 1"在这个插入排序算法?

时间:2016-07-25 22:57:15

标签: algorithm sorting python-3.5

我正在学习如何在python3中从教程中实现插入排序算法,但我似乎无法理解为什么它是" j - = 1"在此代码中,而不是j + = 1。

sample1 = [5,3,2,4,6]

def insertion_sort(sample):
    print("initial sample: ",sample)

    for i in range(1,len(sample)):
        j = i
        while(j!=0 and sample[j] < sample[j-1]):
            sample[j-1],sample[j] = sample[j],sample[j-1]
            j -= 1   #why this and not j += 1 instead?
    print("sorted sample: ",sample)

insertion_sort(SAMPLE1)

2 个答案:

答案 0 :(得分:0)

因为j从i的值开始并且下降到0。

如果你想将j增加1 - 你想要做到 - 你的j永远不会达到0所以你的while循环中的j!= 0将一直是真的,这意味着无限循环。

答案 1 :(得分:0)

插入排序示例: enter image description here
如您所见,插入排序从第二个元素开始,与选择排序不同。因此,您从继续增加i开始,将j从位置i减少到0。因此,在i排列中,您将找到的最低元素放在第一位并创建一个大小为i的排序数组

def insertion_sort(sample):
    print("initial sample: ",sample)

    for i in range(1,len(sample)):
        j = i #start from i and run till 0.
        while(j!=0 and sample[j] < sample[j-1]):
            sample[j-1],sample[j] = sample[j],sample[j-1] #swapping if element j-1 > element j to get lowest element on 1st place.
            j -= 1   #from element i to element 0
    print("sorted sample: ",sample)