首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择-节点排序- java

选择-节点排序- java
EN

Stack Overflow用户
提问于 2017-04-03 23:29:08
回答 2查看 440关注 0票数 0

我目前正在尝试为java中的节点编写一个选择排序。我还编写了一个冒泡排序,它工作得很完美,但由于某些原因,选择排序不起作用。我对java还很陌生,所以请原谅我没有发现错误。

我的选择排序实际上是对所有内容进行排序。结果是好的。但是执行并不是选择排序应该如何工作的。

首先,我切换了节点而不是值,它可以正常工作,但并不像它应该的那样。所以我想出了一个解决方案,把Node放在原来的位置,然后切换它的值。

代码语言:javascript
复制
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之前,而不是切换它。我将向您展示一个示例输出

未排序:

代码语言:javascript
复制
2, 9, 7, 6, 3, 1, 5, 8, 

开始排序:

代码语言:javascript
复制
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, 

排序:

代码语言:javascript
复制
1, 2, 3, 5, 6, 7, 8, 9, 

//您可以在第1行看到-它将5切换为2,这正是selection-sort应该做的。//第二行+-它只是把小整数放在大整数的前面。

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

EN

回答 2

Stack Overflow用户

发布于 2017-04-03 23:56:59

你应该尝试用你的算法遍历你的数据集。

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

所以在你开始排序的第一行(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

没有更多的交换,增量i。

相反,请尝试将算法更新为仅在找到最小项时进行交换。

票数 0
EN

Stack Overflow用户

发布于 2017-04-04 01:10:20

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43188598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档