我正在编写一个程序来比较不同的排序方法。我随机生成了 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”(然后再转换回来)。
- 这是java spec对于“Collections.shuffle”。
- 请参阅“Collections.shuffle”教程 on tutorialspoint .
- 还有一个示例数组 ('int[]') 版本 on Vogella .
另一方面,我认为最好使用策略模式来实现这样的多种排序机制,而不是像您那样实现它。例如:
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/