【问题标题】:Selection-sort on nodes - java节点上的选择排序 - java
【发布时间】:2017-04-03 15:29:08
【问题描述】:

我目前正在尝试为 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 行看到 - 它将 2 与 5 切换,这正是选择排序应该做的。 // 第二行 + - 它只取小整数并将其放在大整数的前面。

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

【问题讨论】:

    标签: java sorting nodes selection-sort


    【解决方案1】:

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

    基本上,您看到的问题是,如果 j 小于 i 的当前值,则 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。

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

    【讨论】:

    • 谢谢!我现在知道了。我完全搞砸了选择排序。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多