哪种排序算法产生这些步骤?

时间:2016-08-08 19:39:36

标签: sorting

这是今天考试中的一个多项选择题,而且(至少)其中一个答案应该是真的,但对我来说,他们看起来都错了。

分类步骤如下:
5 2 6 1 3 4
4 2 6 1 3 5
4 2 5 1 3 6
4 2 3 1 5 6
1 2 3 4 5 6

可用的答案是:冒泡排序,插入排序,选择排序,合并排序和快速排序。

3 个答案:

答案 0 :(得分:3)

我认为这是一种快速排序。在这里,我们可以看到以下步骤:

  • 随机选择数组中的引用元素(pivotValue),重新排序数组的元素。

  • 将大于参考值的所有值移动到右侧,并将所有下方支撑的值移动

  • 重复算法,对数组的左侧和右侧进行未排序,而每个元素不会出现在其位置

为什么我这么认为:

它肯定不是冒泡排序,因为它比较了数组开头的前两个元素,第一步应该是2 5 6 1 3 4

它不是插入排序,因为它是一个顺序算法。在第一步中,我们看到比较第一个和最后一个元素

它不是选择排序,因为它找到最低值并将其移到顶部,所以第一步应该是1 5 2 6 3 4

它不是Merge Sort,因为数组分为两个子数组。在这种情况下,我们看到交互“第一”和“第二”部分

答案 1 :(得分:-2)

要解决这个问题,您所要做的就是为每个排序算法创建一个函数,但包含一个语句,以便在每次交换后打印出数组。然后将您的打印友好排序算法应用于初始数组[5 2 6 1 3 4],并查看哪种排序方法产生相同的输出。此外,这将帮助您比较所有不同的方法。

答案 2 :(得分:-2)

他们都不是。

  • 冒泡排序:没有。在k步之后,最后的k个元素应该是k最大的,已排序。
  • 插入排序:没有。在k步之后,应该对k个第一个元素进行排序。
  • 选择排序:没有。在k步之后,k个第一个元素应该是最小的,排序的。
  • 合并排序:没有。在k步之后,值只能移动2^k - 1个位置。 (5在k = 1时移动5个位置)
  • 快速排序:没有。无论枢轴是什么,1和6是极值,它们都可以保持在这个初始位置。

关于快速排序:为了明确表示不可能,让我们在第一步中枚举每个数据透视的结果:

  • 5:[2134] - 5 - [6]。 (2134可以按任何顺序)
  • 2:[1] - 2 - [5634]
  • 6:[52134] - 6
  • 1:1 - [52634]
  • 3:[21] - 3 - [564]
  • 4:[213] - 4 - [56]

一种明显的方式可以看出所有与OP输出不兼容的方法是,无论你如何实现枢轴或者16都在DoCmd.RunSQL ("Insert Into TestingStatistics (BadgeNumber, TestName, College, Instructor, SigninTime, Special) " & _ "Values (" & Me!txtBadgeNo.Value & ", '" & strTestName & "', '" & strCollege & "', '" & strInstructor & "', Now(), " & Me!chkSpecial.Value & ");") 之前。分区。

相关问题