Java BubbleSort

时间:2016-04-25 19:46:27

标签: java bubble-sort

我遇到一个问题,我需要按字母顺序对String数组进行排序。我能够对一个数组进行排序,但是当有另外两个数组对应于第一个数组时,问题就开始了。每个数组中的每个值都应该在同一个地方,以使信息不会混乱。排序array1后,它按字母顺序排列,但我不知道如何根据array2array3更改array1中的位置。排序完成后。

到目前为止我的代码是:

public  void sort() 
{

    boolean finish = false;

    while(finish == false){

        finish = true;

        for(int i=0;i<Country.length-1;i++)

        {
            int num = 0;
            if(Country[i] != null && Country[i + 1] != null)
            {
                String name1=Country[i]; String name2=Country[i+1];
                num=name1.compareTo(name2);
            }
            else if(Country[i] == null && Country[i + 1] == null){
                num = 0;
            }
            else if(Country[i] == null){
                num = 1;
            }
            else {
                num = -1;
            }
            if(num>0)
            {
                String temp=Country[i];

                Country[i]=Country[i+1];
                Country[i+1]=temp;
                finish=false;
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

如果您希望根据您在国家/地区数组中所做的比较来交换所有数组。您可以在一次比较后交换多个数组。

If(array1[i] > array1[i+1]){
    Swap(array1[i],array1[i+1)
    Swap(array2[i],array2[i+1])
}

通过使用交换功能,您可以更轻松地在更多阵列中进行交换。

答案 1 :(得分:1)

到目前为止,最推荐的方法是重新设计您的程序,并将所有相关项目排列在一个类中。毕竟,这就是对象的用途。然后,您可以创建对象Comparable,为其提供compareTo方法,然后对其进行排序。

但是如果你真的无法做到这一点,你应该做的是,每当你在排序数组中交换任何两个项目时,确保你交换其他数组中的相应项目。

因此,如果您有数组countrycapitalheadOfState,则必须编写如下内容:

  String temp=country[i];

  country[i]=country[i+1];
  country[i+1]=temp;

  temp=capital[i];
  capital[i]=capital[i+1];
  capital[i+1]=temp;

  temp=headOfState[i];
  headOfState[i]=headOfState[i+1];
  headOfState[i+1]=temp;

这样,无论何时在主阵列中移动任何东西,您都会移动其他阵列中的相应项目,因此它们将保持在一起。

但是,如果你重新设计你的程序,它会更受欢迎。

另请注意Java语言约定 - 变量名称不应以大写字母开头,只应以类型名称开头。

答案 2 :(得分:0)

您必须同时交换CountryCity数组中的元素。

public class BubbleSortTmp {
    public String[] Country = {"z", "h", "a"};
    public int[] City = {3, 2, 1};

    public void printCountry() {
        for (String s : Country) {
            System.out.printf("%s ", s);
        }
        System.out.println();
    }

    public void printCity() {
        for (int s : City) {
            System.out.printf("%s ", s);
        }
        System.out.println();
    }

    public void sort() {
        for (int outer = Country.length - 1; outer > 0; outer--) {
            for (int inner = 0; inner < outer; inner++) {
                if (Country[inner].compareTo(Country[inner+1]) > 0) {
                    swapCountry(inner, inner+1);
                    swapCity(inner, inner+1);
                }
            }
        }
    }

    private void swapCountry(int first, int second) {
        String tmp = Country[first];
        Country[first] = Country[second];
        Country[second] = tmp;
    }

    private void swapCity(int first, int second) {
        int tmp = City[first];
        City[first] = City[second];
        City[second] = tmp;
    }

    public static void main(String[] args) {
        BubbleSortTmp bs = new BubbleSortTmp();

        System.out.println("Before: ");
        bs.printCountry();
        bs.printCity();

        bs.sort();

        System.out.println("After: ");
        bs.printCountry();
        bs.printCity();
    }
}