我的任务是在排序数组时计算总比较。 给定整数数组{8,2,1,4,3,5},我从左边的第二个元素开始,将它与第一个元素进行比较,切换它们,然后将第三个元素与前两个元素进行比较,等等on,以确定每个元素应位于何处。
我正在计算总共15个比较,但正确的比较计数是10。 我知道通过选择排序对这个数组进行排序是15个比较,那么在这个例子中使用插入排序时,比较计数的方式和原因有何不同?
答案 0 :(得分:0)
您对插入排序的工作方式的理解是错误的。
将此伪代码用于插入排序:
mark first element as sorted
for each unsorted element
'extract' the element
for i = lastSortedIndex to 0
if currentSortedElement > extractedElement
move sorted element to the right by 1
else: insert extracted element
初始数组:[8, 2, 1, 4, 3, 5]
比较1:2 < 8
数组:[2, 8, 1, 4, 3, 5]
比较2:1 < 8
数组:[2, 1, 8, 4, 3, 5]
比较3:1 < 2
数组:[1, 2, 8, 4, 3, 5]
比较4:4 < 8
数组:[1, 2, 4, 8, 3, 5]
比较5:4 > 2
数组:[1, 2, 4, 8, 3, 5]
比较6:3 < 8
数组:[1, 2, 4, 3, 8, 5]
比较7:3 < 4
数组:[1, 2, 3, 4, 8, 5]
比较8:3 > 2
数组:[1, 2, 3, 4, 8, 5]
比较9:5 < 8
数组:[1, 2, 3, 4, 5, 8]
比较10:5 > 4
数组:[1, 2, 3, 4, 5, 8]
排序!