用Java随机生成10000不含重复的整数,用冒泡排序对其从小到大排序并记录运行时间(分三种情况:有序,逆序,随机排序)
时间: 2023-09-18 17:06:33 浏览: 98
### 回答1:
好的,这个问题我可以回答。以下是我的回答:
使用Java可以通过Random类生成不含重复的整数,然后使用冒泡排序对其进行排序。对于有序和逆序的情况,冒泡排序的时间复杂度为O(n^2),而对于随机排序的情况,平均时间复杂度为O(n^2)。具体实现可以参考以下代码:
```
import java.util.Arrays;
import java.util.Random;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = generateRandomArray(10000);
long startTime = System.currentTimeMillis();
bubbleSort(arr);
long endTime = System.currentTimeMillis();
System.out.println("运行时间:" + (endTime - startTime) + "ms");
}
public static int[] generateRandomArray(int n) {
int[] arr = new int[n];
Random random = new Random();
for (int i = ; i < n; i++) {
arr[i] = random.nextInt(n);
}
return arr;
}
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = ; i < n - 1; i++) {
for (int j = ; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
```
注意,这里的运行时间只是排序算法的运行时间,并不包括生成随机数的时间。
### 回答2:
使用Java随机生成10000个不重复的整数的方法如下:
```java
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class RandomIntGenerator {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
Random random = new Random();
while (set.size() < 10000) {
set.add(random.nextInt(100000));
}
Integer[] numbers = set.toArray(new Integer[set.size()]);
// 进行冒泡排序并记录运行时间
long startTime = System.currentTimeMillis();
bubbleSort(numbers);
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("排序运行时间:" + totalTime + "毫秒");
}
public static void bubbleSort(Integer[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换arr[j]和arr[j+1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
```
对于有序情况,可以使用以下方法生成有序数组:
```java
Set<Integer> set = new LinkedHashSet<>();
for (int i = 1; i <= 10000; i++) {
set.add(i);
}
Integer[] numbers = set.toArray(new Integer[set.size()]);
```
对于逆序情况,可以使用以下方法生成逆序数组:
```java
Set<Integer> set = new LinkedHashSet<>();
for (int i = 10000; i >= 1; i--) {
set.add(i);
}
Integer[] numbers = set.toArray(new Integer[set.size()]);
```
以上是基于冒泡排序的方法,当数据量较大时,冒泡排序的效率较低。如果要提高排序效率,可以考虑使用其他排序算法,比如快速排序、归并排序等。
### 回答3:
首先,我们可以使用Java的随机数生成器(Random类)来生成10000个不重复的整数。我们可以声明一个长度为10000的整型数组,然后使用一个while循环来生成随机数并将其存储到数组中,直到数组中没有重复的元素为止。下面是代码示例:
```java
import java.util.Random;
public class RandomGenerator {
public static void main(String[] args) {
int[] numbers = new int[10000];
Random random = new Random();
int i = 0;
while (i < 10000) {
int num = random.nextInt(10000);
if (!contains(numbers, num)) {
numbers[i] = num;
i++;
}
}
}
private static boolean contains(int[] array, int num) {
for (int i : array) {
if (i == num) {
return true;
}
}
return false;
}
}
```
接下来,我们可以使用冒泡排序算法对数组进行排序,并记录排序所需的时间。冒泡排序算法会比较相邻的两个元素,如果顺序不对,则交换它们的位置。这个过程会重复进行,直到整个数组都变得有序。下面是代码示例:
```java
public class BubbleSort {
public static void main(String[] args) {
// 生成10000个不重复的随机整数...
// 进行冒泡排序,并计算时间
long startTime = System.currentTimeMillis();
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = 0; j < numbers.length - i - 1; j++) {
if (numbers[j] > numbers[j + 1]) {
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
long endTime = System.currentTimeMillis();
long executionTime = endTime - startTime;
System.out.println("冒泡排序运行时间:" + executionTime + "毫秒");
}
}
```
至此,我们已经实现了生成10000个不重复的整数,并使用冒泡排序算法进行排序并记录时间的功能。在有序、逆序和随机排序情况下,可以分别运行这段代码来获得不同情况下的执行时间。
阅读全文