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

时间:2017-05-08 06:29:45

标签: 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 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(){

  }
}

1 个答案:

答案 0 :(得分:0)

我认为对于用例OP似乎有,数组只需要重新洗牌,这种方法重新洗牌虽然不能保证它会将其重置为原始数组

private void reset(final int arr[]) {
    Random rand = new Random();

    for (int i = 0; i < arr.length; i++) {
         int nextInt = rand.nextInt(arr.length);
         int temp = arr[i];
         arr[i] = arr[nextInt];
         arr[nextInt] = temp;
    }
}