用Java随机生成10000不含重复的整数,用选择排序对其从小到大排序并记录运行时间(分三种情况:有序,逆序,随机排序)
时间: 2023-08-31 07:35:16 浏览: 105
### 回答1:
您好,我可以回答您的问题。以下是我的回答:
使用Java可以通过Random类生成10000个不重复的整数,可以将生成的整数存储在一个数组中。然后使用选择排序算法对数组进行排序,最后记录排序的运行时间。
对于有序的情况,选择排序的时间复杂度为O(n^2),因为每个元素都需要与其余元素进行比较。因此,排序的运行时间将非常快。
对于逆序的情况,选择排序的时间复杂度也为O(n^2),因为每个元素都需要与其余元素进行比较。但是,由于数组已经是逆序的,因此排序的运行时间将比有序的情况慢一些。
对于随机排序的情况,选择排序的时间复杂度仍然为O(n^2),因为每个元素都需要与其余元素进行比较。排序的运行时间将取决于数组中元素的分布情况。
希望我的回答能够帮助您!
### 回答2:
用Java随机生成10000不含重复的整数的方法如下:
```java
import java.util.Arrays;
import java.util.Random;
public class RandomNumGenerator {
public static void main(String[] args) {
int[] numbers = generateRandomArray(10000);
// 对生成的数组进行选择排序并记录时间
long startTime = System.nanoTime();
selectionSort(numbers);
long endTime = System.nanoTime();
long elapsedTime = endTime - startTime;
System.out.println("运行时间:" + elapsedTime + "纳秒");
}
// 生成不含重复的整数数组方法
public static int[] generateRandomArray(int n) {
int[] numbers = new int[n];
Random rand = new Random();
for (int i = 0; i < n; i++) {
int num = rand.nextInt(n);
while (contains(numbers, num)) {
num = rand.nextInt(n);
}
numbers[i] = num;
}
return numbers;
}
// 检查数组中是否包含特定元素的方法
public static boolean contains(int[] arr, int num) {
for (int i : arr) {
if (i == num) {
return true;
}
}
return false;
}
// 选择排序方法
public static void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
```
对于三种情况的排序,可以在生成数组之后进行适当的操作:
1. 有序情况:生成的数组本身已经是有序的,不需要额外操作。
2. 逆序情况:将生成的数组进行反转操作即可,可以在生成数组之后使用Arrays类的`sort()`方法对数组进行逆序排序。
3. 随机排序:无需额外操作,生成的数组本身就是随机排序的。
以上是使用选择排序对生成的数组从小到大排序并记录运行时间的方法。
### 回答3:
首先,我们可以使用Java的Random类来生成不重复的整数。我们可以创建一个HashSet来保存已经生成的整数,当生成的整数已经存在于集合中时,则重新生成,直到生成的整数不重复为止。重复该步骤直到集合的大小等于10000。
```java
import java.util.*;
public class RandomGenerator {
public static void main(String[] args) {
Set<Integer> integers = new HashSet<>();
Random random = new Random();
while (integers.size() < 10000) {
integers.add(random.nextInt());
}
List<Integer> list = new ArrayList<>(integers);
// 对随机生成的整数进行排序并记录运行时间
long start = System.currentTimeMillis();
selectionSort(list);
long end = System.currentTimeMillis();
long time = end - start;
System.out.println("随机排序时间: " + time + " 毫秒");
// 对整数进行逆序排序并记录运行时间
Collections.reverse(list);
start = System.currentTimeMillis();
selectionSort(list);
end = System.currentTimeMillis();
time = end - start;
System.out.println("逆序排序时间: " + time + " 毫秒");
// 对整数进行正序排序并记录运行时间
Collections.sort(list);
start = System.currentTimeMillis();
selectionSort(list);
end = System.currentTimeMillis();
time = end - start;
System.out.println("有序排序时间: " + time + " 毫秒");
}
// 选择排序算法
public static void selectionSort(List<Integer> list) {
int n = list.size();
for (int i = 0; i < n-1; i++) {
int minIndex = i;
for (int j = i+1; j < n; j++) {
if (list.get(j) < list.get(minIndex)) {
minIndex = j;
}
}
int temp = list.get(minIndex);
list.set(minIndex, list.get(i));
list.set(i, temp);
}
}
}
```
这段代码首先生成10000个不重复的整数,并将它们保存在一个ArrayList中。然后,我们使用选择排序算法对这些整数进行排序,并记录每种情况下的运行时间。最后,我们打印出每种情况下的排序时间。
阅读全文