【问题标题】:Counting Comparisons Using Insertion Sort使用插入排序计算比较
【发布时间】:2017-04-20 10:48:12
【问题描述】:

我的任务是在对数组进行排序时计算总比较数。 给定整数数组 {8, 2, 1, 4, 3, 5},我从左数第二个元素开始,将其与第一个元素进行比较,切换它们,然后将第三个元素与前两个元素进行比较,如此on,以确定每个元素的位置。

我一共计算了 15 个比较,但正确的比较计数是 10。 我知道通过选择排序对这个数组进行排序是 15 次比较,那么在本例中使用插入排序时,比较计数有何不同以及为什么不同?

【问题讨论】:

  • 这个问题引用自一本Java教科书。我计算出的比较结果是 15,但我认为我在插入排序过程中遗漏了一些东西,因为解决方案手册指出答案是 10。

标签: java sorting selection insertion


【解决方案1】:

您对插入排序如何工作的理解是错误的。

使用此伪代码进行插入排序:

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]

排序!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    相关资源
    最近更新 更多