如何在java中对三个数组进行排序?

时间:2012-12-05 13:29:36

标签: java arrays sorting

我的proggramme Surname,Forename和result中有三个数组,需要创建一个排序数组 姓:克里斯姓:查尔顿:结果:54 姓:Annett:姓:Lyle:结果67 如果我想按照姓氏的字母顺序对其进行排序,我需要移动所有字段,而不仅仅是姓氏。这是我正在处理的冒泡代码

    int swap;
    boolean swapflag = true;
    //outer loop
    while (swapflag == true)
    {
        swapflag = false;
        //inner loop
        for (int index=0; index < (nums.length - 1); index++)
        {
            //swap routine
            if (nums[index]> nums[index + 1])
            {   //swap routine
                swap = nums[index];
                nums[index] = nums[index + 1];
                nums[index + 1] = swap;
                swapflag = true;
            }
        }//end inner
    }//end outer

    System.out.println ("\nArray Contents after sorting"
            + "\n*************");

    for (int index=0; index < nums.length; index ++)
    {  
        System.out.println("Array element " 
                + index + ": " + nums[index]);  
    }
}

}

   `     package projStudent;
import java.util.Scanner;
public class UnitResults 
{
    //delcare Scanner as keyb
    static Scanner keyb = new Scanner (System.in);
    //declare fields
    static String studentForename [];
    static String studentSurname [];
    static int [] studentResult;

    static int pointer;

    //constructor
    UnitResults(int sizeofclass)
    {//start of constructor
        studentForename = new String [sizeofclass];
        studentSurname = new String [sizeofclass];
        studentResult = new int [sizeofclass];
        pointer = 0;
    }//end of constructor

    public boolean add(String studentForename[], String studentSurname[],
             int studentResult[])
    {//start of add method
        if (pointer == studentResult.length )
        {//start of if statement
            System.out.println("Sorry Array is full");
            return false;
            studentResult[pointer] = studentResult[];
            pointer ++;
        }//end of if statement


    }//end of add method
    public boolean delete(int element)
    {//start of delete method
        element = element - 1;
        if ((element >= 0) && ( element < pointer))
        {//start of if statement
            for(int index = (element + 1); index < pointer; index++)
            {//start of for statement
                studentResult[index - 1] = studentResult[index];   
            }//end of for statement
            pointer--;
            return true;
        }//end of if statement
        else
        {//start of else statement
            return false;
        }//end of else statement  
    }//end of delete method

       public String find()
    {//start of display
        String strOutput="";
        strOutput = strOutput + "Students";
        if (pointer==0)
        {//start of if statement
            strOutput = strOutput + "There are no records in this Array";
            return strOutput;
        }//end of if statement

    for (int index=0; index < pointer; index++)
    {//start of for method
        strOutput = strOutput + "Student Name" + studentSurname[index] + studentForename + 
                "Student Result" + studentResult +"\n";
    }//end of for method

    return strOutput;
}//display
   public int sort (int UnitResults)

   {//start of sort
       int sort;
       boolean swapflag = true;
       while (swapflag == true)
       {//start of while loop
           swapflag = false;
           for (int index=0; index < (UnitResults - 1); index++)
           {
               if (studentResult[index]> studentResult[index + 1])
            {   //swap routine
                sort = studentResult[index];
                studentResult[index] = studentResult[index + 1];
                studentResult[index + 1] = sort;

                swapflag = true;
            }


           }

       }//end of while loop

   }//end of sort

}`

5 个答案:

答案 0 :(得分:1)

不幸的是,你的帖子很混乱,因为你没有包含一些东西,比如你正在排序的当前数组。如果我正确理解你的问题......

无论语言如何,您的策略都会涉及更改元素的交换方式。如果您的数组包含复合数据,那么只需在交换中进行分配即可。如果您的数据分散,那么您的交换需要交换每个变量。您总是可以将数组的索引排序到另一个数组中,然后使用该数组间接引用第一个数组,以进行排序访问。

答案 1 :(得分:1)

我建议您为此目的使用List。 首先创建一个对象。例如“Person”包含“Forname”,“Surename”,“Result”的成员。然后用这些对象填充列表,实现Interface Compareable接口并使用Collection.sort()方法。

class Person implements Comparable<Person>
{
   private String forname;
   private String surname;
   private int rating;

   public Person(String forename, String surname, int rating)
   {
         this.forname = forename;
         this.surname = surname;
         this.rating = rating 
   }

  public int compareTo(Person p) {
       if(p.rating == this.rating) 
          return 0;
       else if(p.rating < this.rating) 
            return -1;

       return 1;  
  }


}

class Test{

    public static void main(String[] args){

        List<Person> personList = new ArrayList<Person>();

         Person p1 = new Person("John","Smith",10);
         Person p2 = new Person("Max","Muster",20);
         Person p3 = new Person("Sarah","Clark",15);

         personList.add(p1);
         personList.add(p2);
         personList.add(p3);

         personList.sort();
    }

}

答案 2 :(得分:0)

Java编程语言有许多功能可以帮助您解决您遇到的问题,第一个功能是包含适当的数据结构和方法来操作这些数据结构中的对象。

首先,我建议使用java类来表示单个人实体...想一想,当你查找一个人的信息时,你不会查阅三个单独的书籍或计算机屏幕,或者什么,当所有的信息可以组织到一个地方。例如,对于上面的人,您可以使用以下内容:

public class Person implements Comparable<Person> {
    public String firstName;
    public String lastName;
    public int result;

    public Person(String fn, String ln, int r) {
        firstName = fn;
        lastName = ln;
        result = r;
    }

    public int compareTo(Person otherPerson) {
       return lastName.compareTo(otherPerson.lastName);
    }

}

这将为您提供一个存储所有人员信息的对象,默认情况下可以通过姓氏轻松排序(您可以使用比较器更改此行为,我在此不会介绍。)

现在,您可以拥有一个人员数组,而不是拥有三个不同的名字,姓氏和结果数组。实际上已经有java语言中的数组排序机制,你可以选择研究和使用,但是如果你想使用自己的排序,你只需要用这样的东西替换你的交换条件: / p>

if(persons[index].compareTo(persons[index+1]) > 0) {
    ...
}

答案 3 :(得分:0)

我只想问你

为什么要创建班级学生,即

class Student{
     private String studentForename;
     private String studentSurname;
     private int studentResult;
//setters and getters
}

并将它们放入一些集合中,即List 你把它们放入3个不同的阵列?

你是否意识到,如果你在列表中很好地使用它们,你可以只使用Collections.sort()对它们进行排序?

答案 4 :(得分:0)

无法正确理解这个问题:您是否正在寻找一种手动实施排序算法(泡泡,快速或其他)的方法,或者您想简单地对它们进行排序?一般来说,你永远不应该实现自己的排序'因为Java为自己提供了非常有效的一点......或者这是一个练习吗?可能:))

我能想象的最好的方法是,只要原始形式的3个数组通过索引链接,创建一个姓氏/索引地图,加载它形成姓氏数组,按键排序Map.Entry然后你将拥有数组索引按您想要的方式排序。点击此处了解更多详情:how to sort Map values by key in Java

PS如果您不进行练习,其他人提供的解决方案是正确且可取的。更好地处理结构化对象而不是3个独立数据。