在 Java 中的数组中使用选择排序

Using Selection sort within an array in Java

我有一个名为 Person 的 class,其中我有一个构造函数、getter 和 setter 用于三个变量:姓名、年龄和身高。我还在这个 class 中实现了一个选择排序方法来对人们的年龄进行排序。然后我创建了一个有十个人的数组,我给他们不同的名字、年龄和身高,但我还没有使用选择排序方法对人的年龄进行排序。我想知道您是否可以帮助我了解我做错了什么以及为什么我没有在我的数组中使用该方法。

我还想知道是否有更智能(更少手动)的方法来实现我想要的类型的数组(包含姓名、年龄和身高),因为我会添加更多人,比如20 个人,这将需要一些额外的工作,我想我可以通过一些更好的方法来节省这些工作。我知道如何用数组列表来做,但我想知道用数组是否可行或合理。

//Class Person

public class Person {
    private String name;
    private int height;
    private int age;

public void Person (String name, int height, int age){
    this.name = name;
    this.height = height;
    this.age = age;
}

public String getName (){
    return name;
}

public int getHeight (){
    return height;
}

public int getAge (){
    return age;
}

public void setName (String name) {
    this.name = name;
}

public void setHeight (int height) {
    this.height=height;
}

public void setAge (int age) {
    this.age=age;
}

public int[] selectionSort (int[] age){

    int i, j, minValue, minIndex, temp =0;

    for (i = 0; i<age.length; i++) {
        minValue = age[i];
        minIndex = i;

        for (j=i; j<age.length; j++) {

            if (age[i]<minValue){
                minValue = age [j];
                minIndex = j;
            }
        }
        if (minValue<age[i]){
            temp=age[i];
            age[i]=age[minIndex];
            age[minIndex]=temp;
        }
    }
return age;
}
}

//Array implementation

public class Main {

public static void main(String[] args) {

Person [] persons = new Person [3];

    persons [0] = new Person ();
    persons [0].setName("Josef");
    persons [0].setHeight(170);
    persons [0].setAge(30);

    persons [1] = new Person ();
    persons [1].setName("Marie");
    persons [1].setHeight(160);
    persons [1].setAge(35);

    persons [2] = new Person ();
    persons [2].setName("Karel");
    persons [2].setHeight(180);
    persons [2].setAge(40);

    for (int i=0; i<persons.length; i++){
        System.out.println("Jméno: " + persons[i].getName()+ ", věk: " + persons[i].getAge() + ", vyška: " + persons[i].getHeight());
    }

    //My main problem is here
    for (int i = 0; i<persons.length; i++){
        System.out.println(persons[i].selectionSort());
    }

}
}

你的代码有几个问题,你得上网研究一下,弄清楚你的概念。不过,我要解释一下:

System.out.println(persons[i].selectionSort());

现在,您已经创建了此方法 selectionSort(),您可以在 Person 类型的对象上使用它,但它需要一个 int[] 类型的参数,而您却没有提供。

这是一个逻辑错误,selectionSort 不能像你不能在数组的每个索引上调用这个方法那样工作。一次对数组进行排序是他的工作。所以,你必须传递整个 persons[] 数组,其余的将由 selectionSort()

完成
public int[] selectionSort (int[] age)

您正在使用 int age[],您不能这样做,因为您没有 int 类型的数组,您拥有的是每个对象 Person 类型的数组类型 Person 具有属性 age,您可以通过 dot operator.

访问它

工作代码:

public class Person 
{
    public static Person [] persons = new Person [3];  // so that every method can access this array
    private String name;
    private int height;
    private int age;  

    public void Person (String name, int height, int age){
        this.name = name;
        this.height = height;
        this.age = age;
    }

    public String getName (){
        return name;
    }

    public int getHeight (){
        return height;
    }

    public int getAge (){
        return age;
    }

    public void setName (String name) {
        this.name = name;
    }

    public void setHeight (int height) {
        this.height=height;
    }

    public void setAge (int age) {
        this.age=age;
    }

    public static void selectionSort(Person persons[])
    {
        int smallest;

        for(int i = 0; i < persons.length; i++)
        {
            smallest=i;
            for(int index = i+1; index<persons.length; index++)
                if(persons[index].age<persons[smallest].age)
                    smallest=index;

            swap(i,smallest);   
        }
    }

    public static void swap(int frst, int scnd)
    {
        Person temporary = persons[frst];
        persons[frst] = persons[scnd];
        persons[scnd] = temporary;
    }

    public static void main(String[] args) 
    {
        persons [0] = new Person ();
        persons [0].setName("Josef");
        persons [0].setHeight(170);
        persons [0].setAge(35);

        persons [1] = new Person ();
        persons [1].setName("Marie");
        persons [1].setHeight(160);
        persons [1].setAge(31);

        persons [2] = new Person ();
        persons [2].setName("Karel");
        persons [2].setHeight(180);
        persons [2].setAge(40);

        for (int i=0; i<persons.length; i++){
            System.out.println("Jmeno: " + persons[i].getName()+ ", vek: " + persons[i].getAge() + ", vyska: " + persons[i].getHeight());
        }

        selectionSort(persons);
        for (int i = 0; i<persons.length; i++){
            System.out.println(persons[i].age);
        }
    }
}

注意: 我在同一个 class Person 中合并了代码,但你可以将它们分成 MainPerson 总是。建议如果分割代码那么在Main.

中包含selectionSort()