java - 如何在 Java 中将已排序数组重置为未排序数组?

标签 java arrays sorting

我正在编写一个程序来比较不同的排序方法。我随机生成了 100,000 个整数并将这些数据存储到一个数组中。我想将相同的数组应用于不同的排序方法以便进行比较。 (我认为为每个方法创建类可以解决我的问题。但我不想创建太多类)。所以我决定创建一个名为 Sorts 的类,并在该类下创建一堆排序函数。我希望将已排序的数组重置为未排序,以便将相同的数组应用于不同的排序方法。谁能告诉我怎么做?

生成数据:

int size = Integer.parseInt(br.readLine());
    int [] data = new int[size];
    for (int i = 0; i< size; i++){
        data[i] = (int)(Math.random()*(10*size));
        System.out.print(data[i]+" ");
    }

创建对象:

Sorts sort = new Sorts(size, data);

调用:

switch(index){
            case "1" :
                System.out.print("\nYou select bubble sort\n");
                sort.bubbleSort();
                break;
            case "2" :
                System.out.print("You select quick sort\n");
                sort.quickSort();
                break;

我的类(class):

class Sorts{
  private int size;
  private int data[];
  Sorts(int size, int [] data){
      this.size = size;
      this.data = data;
  }

  protected void bubbleSort(){
      int temp = 0;
      for (int i = 0; i< (data.length-1); i++){
          for (int j = 0; j<(data.length-1);j++){
              if(data[j]>data[j+1]){
                  temp = data[j];
                  data[j] = data[j+1];
                  data[j+1]= temp;
              }
          }
      }
      printResult();

  }


  protected void quickSort(){

  }

  protected void resetData(){

  }
}

最佳答案

那么,您可以使用Collections.shuffle,它采用“List”参数。这显然意味着将您的“int[]”转换为“List”(然后再转换回来)。

另一方面,我认为最好使用策略模式来实现这样的多种排序机制,而不是像您那样实现它。例如:

interface Sort {
    void sort(int data[], int size);
}

class QuickSort implements Sort {
    void sort(int data[], int size) {
        ...
    }
}    

class MergeSort implements Sort {
    void sort(int data[], int size) {
        ...
    }
}

etc...

顺便说一句:

  • 这只是对整数进行排序,因此请考虑如何对任何类型(也许还有泛型)进行排序。
  • 某些排序(例如 MergeSort)是稳定的,并使用新数组来表示排序后的数据。如何将其返回给调用者?您无法将“数据”设置为新数组。

关于java - 如何在 Java 中将已排序数组重置为未排序数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43841119/

相关文章:

java - 比较 Java 中的状态

java - 将图片上传为 Base64 字符串并截击返回警告 : LogSlowRequest

java - 按计划进行缓存驱逐后,Spring 缓存未被使用

java - 将 OutputStream 重定向到文件

C++如何在不复制数据的情况下添加和到数组?

c++ - 使用文本文件 C++ 初始化数组的更快方法

java - 在 Java 中对多个 int/String 数组进行排序而不丢失顺序

java - 调试 HeapSort Java 代码

PHP递归文件文件夹扫描按修改日期排序

arrays - 对两个数组进行排序所需的最小 "swaps"数