【问题标题】:Java BubbleSortJava 冒泡排序
【发布时间】:2016-04-25 19:46:26
【问题描述】:

我遇到了一个问题,我需要按字母顺序对字符串数组进行排序。我可以对一个数组进行排序,但是当还有 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;
            }
        }
    }

【问题讨论】:

  • 国家数组值,例如是{z,a};城市值是 {2,1} 在对国家数组进行排序后,我希望城市数组交换与国家数组中交换的相同位置的值
  • 是否允许创建自定义的、可比较的对象类来保存所有数据?这样一来,您只需对一个数组进行排序,而不是对多个数组进行排序。
  • 对不起,我的错误是我开始创建基于 3 个数组的 GUI,现在如果我想更改它,我还需要更改整个程序和设计。这就是为什么我试图至少获得某种提示,以节省我的时间。
  • 第一个问题:一定要手动实现冒泡排序吗?有内置的 Java 排序方法执行得更好。无论如何,你的数据是什么?你有一个City,一个Country,还有其他代表一个地方的东西?因此,您创建了一个 Place[](自定义类),然后根据 Country 字符串值对所有 Place 对象进行排序。这样,所有数据都“按正确的顺序”
  • 手动实现冒泡排序不是必须的。我只是想了解它是如何工作的,这就是为什么我想在第一次使用它时手动实现它。我的数组是城市、国家和人口。当所有县按字母顺序排列时,我希望城市和人口保持在同一个地方,因此在 textArea 中连续显示它们之后将是英国、伦敦和任何人口。目前,城市和人口数量在排序国家数组后变得一团糟

标签: java bubble-sort


【解决方案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 语言约定 - 变量名不应该以大写字母开头,只有类型名应该。

【讨论】:

  • 同意重新设计的建议。 OP 确实应该创建一个包含相关数据的新对象。
  • 非常感谢!这对我有用。我同意你的观点,一旦我完成这个版本,我会重新设计它,只是为了能够比较每种方式的优缺点。不管怎样,谢谢!!
【解决方案2】:

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

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

通过使用交换函数,您可以更简单地交换更多数组。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-25
      • 2017-06-17
      • 2013-09-04
      • 1970-01-01
      • 2018-08-19
      • 2019-01-07
      • 1970-01-01
      • 2013-10-09
      • 2015-09-12
      相关资源
      最近更新 更多