我目前正在尝试为java中的节点编写一个选择排序。我还编写了一个冒泡排序,它工作得很完美,但由于某些原因,选择排序不起作用。我对java还很陌生,所以请原谅我没有发现错误。
我的选择排序实际上是对所有内容进行排序。结果是好的。但是执行并不是选择排序应该如何工作的。
首先,我切换了节点而不是值,它可以正常工作,但并不像它应该的那样。所以我想出了一个解决方案,把Node放在原来的位置,然后切换它的值。
public void selectionSort() {
for (IntegerNode i = first; i != null; i = i.nextNode) {
for (IntegerNode j = i.nextNode; j != null; j = j.nextNode) {
if (i.value > j.value) {
int temp = i.value;
i.value = j.value;
j.value = temp;
}
}
}
}所以第一次它实际上做了它应该做的事情。它改变了位置。但在此之后,它将最小的int放在较大的int之前,而不是切换它。我将向您展示一个示例输出
未排序:
2, 9, 7, 6, 3, 1, 5, 8, 开始排序:
1, 9, 7, 6, 3, 2, 5, 8,
1, 2, 9, 7, 6, 3, 5, 8,
1, 2, 3, 9, 7, 6, 5, 8,
1, 2, 3, 5, 9, 7, 6, 8,
1, 2, 3, 5, 6, 9, 7, 8,
1, 2, 3, 5, 6, 7, 9, 8,
1, 2, 3, 5, 6, 7, 8, 9, 排序:
1, 2, 3, 5, 6, 7, 8, 9, //您可以在第1行看到-它将5切换为2,这正是selection-sort应该做的。//第二行+-它只是把小整数放在大整数的前面。
这是我的第一个问题,我希望我给了足够的代码。如果你需要更多,只需添加评论!提前谢谢。
发布于 2017-04-03 23:56:59
你应该尝试用你的算法遍历你的数据集。
基本上,您看到的问题是,如果j小于i的当前值,则i的值将始终与下一个元素j交换。
所以在你开始排序的第一行(i=1,j=2):
9>7 ->交换这些: 1,9,7,6,3,2,5,8,-> 1,7,9,6,3,2,5,8,
7>6 ->交换这些: 1,7,9,6,3,2,5,8,-> 1,6,9,7,3,2,5,8
6>3 ->交换这些: 1,6,9,7,3,2,5,8 -> 1,3,9,7,6,2,5,8
3>2 ->交换这些: 1,3,9,7,6,2,5,8 -> 1,2,9,7,6,3,5,8
没有更多的交换,增量i。
相反,请尝试将算法更新为仅在找到最小项时进行交换。
发布于 2017-04-04 01:10:20
我使用了选项-排序错误。一个基本的错误..对于那些好奇它是如何看起来正确的人:
public void selectionSort() {
for( IntegerNode i = first; i != null; i = i.nextNode){
IntegerNode smallestElement = i;
for ( IntegerNode j = i.nextNode; j != null; j = j.nextNode){
if(smallestElement.value > j.value){
smallestElement = j;
}
}
int temp = i.value;
i.value = smallestElement.value;
smallestElement.value = temp;
}
}https://stackoverflow.com/questions/43188598
复制相似问题