插入排序的步骤
(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