使用选择排序

时间:2014-04-29 01:29:29

标签: java sorting

我刚刚开始了解sorting,而我的class目前正在进行选择。对于我的作业,我必须按递增顺序对number list进行排序,并使用array看起来和当前的比较#进行显示,我们必须在纸上进行。

数字是:

90, 8, 7, 56, 123, 235, 9, 1, 653.

到目前为止,这就是我所拥有的(排序列表以粗体显示):

90|8|7|56|123|235|9|1|653



 # of comparisons: 0

---

**1**|8|7|56|123|235|9|90|653 

 # of comparisons: 1

---

**1**|**7**|8|56|123|235|9|90|653 

 # of comparisons: 2

这基本上是我有疑问的地方。因为8已经在正确的位置,是否还会进行比较?或者它会直接进入下一个价值?那么,它会是:

---

**1**|**7**|**8**|56|123|235|9|90|653 

 # of comparisons: 3

---

or would it be: 

---

**1**|**7**|**8**|**9**|123|235|56|90|653 

 # of comparisons: 3

---

我相信前者是正确的,但我只是想请你们确保我们理解这一点。

3 个答案:

答案 0 :(得分:2)

如果您了解如何选择列表中的最小元素,则会有所帮助。一种有效的方法是首先假设第一个未排序的元素是最小的,然后遍历测试该假设的剩余未排序元素。

90, 8, 7, 56, 123, 235, 9, 1, 653

如果这是您的列表,那么您首先假设90是最小的。然后你比较90到8. 8小于90,所以你更新你的假设是8是最小的。这进行了1次比较。你比较8到7. 7更小,所以现在你的假设是7是最小的。 2比较。你比较7到56. 7更小,所以你的假设保持不变。 3个比较。通过列表进行8次比较并确定1是最小的。

现在您知道1是最小的,您将其与列表中的第一个元素交换。

1, 8, 7, 56, 123, 235, 9, 90, 653

现在1位于正确的位置,您不必再担心它了。现在您需要对以下列表进行排序。

8, 7, 56, 123, 235, 9, 90, 653

稍后进行7次比较,确定7是列表中的最小元素。你用第一个元素交换它。

7, 8, 56, 123, 235, 9, 90, 653

现在您需要对以下列表进行排序。

8, 56, 123, 235, 9, 90, 653

请记住,即使8已经在正确的排序位置,你还不知道8是列表中最小的元素,直到你将它与其他所有项目进行比较在未排序的列表中。因此,您必须进行6次比较才能确定8是最小的元素。但是,由于8是列表中的第一个元素,因此您无需交换它。你可以把它放在原处。

8, 56, 123, 235, 9, 90, 653

现在您需要对以下列表进行排序。

56, 123, 235, 9, 90, 653

等等。

答案 1 :(得分:1)

您应该分别计算比较次数和掉期次数。如果数组的未排序部分中有n个元素,那么您需要n-1个比较来发现哪一个是最小的。一旦你知道哪个是最小的,那么你可能需要或不需要交换。所以我认为进展如下:

  

90 | 8 | 7 | 56个| 123个| 235个| 9个| 1个| 653个
   比较数:0
   交换数量:0


  

<强> 1 | 8 | 7 | 56个| 123个| 235个| 9个| 90个| 653个
   比较数:8
   交换数量:1


  

<强> 1 |的 7 | 8 | 56个| 123个| 235个| 9个| 90个| 653个
   比较数:15
   交换数量:2


  

<强> 1 |的 7 |的 8 | 56 | 123 | 235 | 9 | 90 | 653
   比较数:21
   交换数量:2


  

<强> 1 |的 7 |的 8 |的 9 | 123 | 235 | 56 | 90 | 653 <无线电通信/>    比较数:26
   交换数量:3

答案 2 :(得分:0)

如果通过&#34;比较&#34;你的意思是单次通过,那么前者是正确的。虽然你可以注意数字,并知道8位于正确的位置,但算法并不聪明,并且仍然必须检查列表未排序部分中的其余数字以确定。

你可能会问&#34;但8来自7,所以怎么会有更小的东西?&#34;未排序的列表中可能存在重复项(另外7个)。

Wikipedia Example