节点上的选择排序 - java

时间:2017-04-03 15:29:08

标签: java sorting nodes selection-sort

我目前正在尝试为java中的节点编写选择排序。 我还编写了一个完美的冒泡排序,但由于某种原因,选择排序不起作用。我是java的新手,请原谅我找不到错误。

我的选择排序实际上排序了一切。结果很好。但执行不是选择排序应该如何工作。

首先,我切换了节点而不是值,它工作但不是应该的。所以我提出了将节点留在原地的解决方案,然后只需切换值。

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,这正是选择排序应该做的。 //第二行+ - 它只需要小的整数并将其置于更大的整数之前。

这是我的第一个问题,我希望我提供了足够的代码。如果您需要更多,只需添加评论!提前谢谢。

2 个答案:

答案 0 :(得分:0)

您应该尝试使用算法遍历数据集。

基本上你看到的问题是,如果j小于我当前的值,i的值将始终与下一个元素j交换。

所以在第1行开始排序(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。

相反,只有在找到最小的项目时才尝试将算法更新为交换。

答案 1 :(得分:0)

我使用了选择排序错误。一个基本的错误..对于那些好奇的看起来如何正确:

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;
    }
}