插入排序

插入排序的步骤

(1)在第一轮里,暂时将索引1(第2格)的值移走,并用一个临时变量来保存它。这使得该索引处留下一个空隙,因为它不包含值。

在之后的轮回,我们会移走后面索引的值。

(2)接着便是平移阶段,我们会拿空隙左侧的每一个值与临时变量的值进行比较。

如果空隙左侧的值大于临时变量的值,则将该值右移一格。

随着值右移,空隙会左移。如果遇到比临时变量小的值,或者空隙已经到了数组的最左端,就结束平移阶段。

(3)将临时移走的值插入当前空隙。

(4)重复第(1)至(3)步,直至数组完全有序。

插入排序的效率

N^2比较和平移的合计+N-1次移除+N-1次插入=N^2+2N-2步

大O只保留最高阶的N。

O(N^2+2N-2)还得进一步简化成O(N^2)。

Python实例:

def insertion_sort(array):    
    for index in range(1, len(array)): // 发起一个从索引1开始的循环来遍历数组。变量index保存的是当前索引。
        position=index // 给position赋值为index,
        temp_value=array[index] // 给temp_value赋值为index所指的值。
        while position > 0 and array[position - 1] > temp_value: // 在内部发起一个while循环,以检查position左侧的值是否大于temp_value。    
            array[position]=array[position - 1] // 若是,则用array[position]=array[position - 1]将该值右移一格       
            position=position - 1 // 并将position减1
            array[position]=temp_value    

array = [8,4,2,3];
insertion_sort(array);        
print array

参考:数据结构与算法图解.6

原文地址:https://www.cnblogs.com/ooo0/p/12151908.html