我的选择排序算法出了什么问题?

时间:2018-04-14 04:41:48

标签: java sorting

我正在用Java做出选择排序算法。

逻辑似乎很完美,但这段代码并没有对元素进行排序。

import java.util.Arrays;
public class selectionsort{

    int y;


    void swap(int a[], int firstindex, int secondindex){
        int temp=a[firstindex];
        a[firstindex]=a[secondindex];
        a[secondindex]=temp;

    }

    public void selectionsort1(int a[],int i){
       int lowestindex;
       for(y=0;y<a.length-2;y++){
           lowestindex=selectionsort2(a,y);
           swap(a,y,lowestindex);
       }

    }

    public int selectionsort2(int a[],int y){
        int setvalue=a[y];
        int setindex=y;
        for(int x=setindex+1;x<a.length;x++){
            if(a[x]<setvalue){
                setvalue=a[x];

            }

        }
        return setvalue;
    }

    public static void main(String args[]){
        int[] a={88,28,39,40,15,06,97,80};
        int i=0;
        int y=0;
        selectionsort s1=new selectionsort();
        s1.selectionsort1( a, i);
        for (int element: a) {
            System.out.println(element);
        }
    }


}

为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

为什么你的算法是一个状态? (属性y)。您应该能够使用静态方法实现这种算法。无需创建&#34;排序对象&#34;。

选择排序:此算法不显示任何嵌套方法调用的需要。请在实施前检查算法:https://en.wikipedia.org/wiki/Selection_sort。只需反复遍历您的元素,如该页面的动画所示。

请注意,此算法对于大型数组效率非常低,并且可能导致可怕的计算时间(与嵌套调用相结合,也会导致可怕的内存消耗)。如果你的问题不是学术性的,而是一个实际问题 - 而你只是&#34;只有&#34;需要对数组进行排序,你可能只需要使用Java&#34; Arrays.sort()&#34;方法

答案 1 :(得分:-2)

Java将方法参数作为原始引用的副本传递。您可以修改它们,它们将显示为已更改但交换将失败。您可以返回数组并从那里捕获它以修改已修改的数组。

本文提供了有关此https://www.javaworld.com/article/2077424/learn-java/does-java-pass-by-reference-or-pass-by-value.html

的更多信息

希望这有帮助。