Java 冒泡排序

Java BubbleSort

我遇到一个问题,我需要按字母顺序对字符串数组进行排序。我能够对一个数组进行排序,但是当还有 2 个数组对应于第一个数组时,问题就开始了。每个数组中的每个值都应该在同一个地方,以免信息混乱。排序 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;
            }
        }
    }

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

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

通过使用交换函数,您可以更轻松地在更多数组中进行交换。

您必须同时交换 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();
    }
}

到目前为止,最推荐的方法是重新设计您的程序,并将所有相关项目安排在一个 class 中。毕竟,这就是对象的用途。然后就可以把这个对象做成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 语言约定 - 变量名称不应以大写字母开头,只有类型名称才应该。