首页 文章

节点上的选择排序 - java

提问于
浏览
0

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

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

2 回答

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

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

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

    所以在你的第1行开始排序(i = 1,j = 2):

    9> 7 - >交换这些:1, 97 ,6,3,2,5,8, - > 1, 79 ,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

    没有互换,增加我 .

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

相关问题