请用【java】帮我写一段快排代码,并帮我讲解下实现逻辑, 隨機生成 100 個 10 至 100000 內的整數, 並且不重覆
时间: 2024-12-24 11:27:48 浏览: 10
以下是使用 Java 编写的快速排序算法示例,以及其实现逻辑。这段代码会随机生成100个1到100000之间的不重复整数,并对其进行排序:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class QuickSortExample {
public static void quickSort(int[] arr) {
if (arr == null || arr.length <= 1) {
return;
}
int pivotIndex = partition(arr, 0, arr.length - 1);
if (pivotIndex > 1) {
quickSort(arr, 0, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, arr.length - 1);
}
}
private static int partition(int[] arr, int low, int high) {
Random rand = new Random();
int pivot = arr[low + rand.nextInt(high - low + 1)];
int i = low, j = high;
while (i < j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i < j) {
swap(arr, i, j);
}
}
swap(arr, i, low); // 将pivot放到正确的位置
return i;
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
List<Integer> randomIntList = new ArrayList<>();
Random rand = new Random();
for (int i = 0; i < 100; i++) {
int num = rand.nextInt(99000) + 1; // 保证不会生成100000以上的数字
while (randomIntList.contains(num)) { // 确保不重复
num = rand.nextInt(99000) + 1;
}
randomIntList.add(num);
}
// 转换为数组以便排序
int[] arr = randomIntList.stream().mapToInt(Integer::intValue).toArray();
System.out.println("Before sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
quickSort(arr);
System.out.println("\nAfter sorting:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
实现逻辑简述:
1. `quickSort`函数是快速排序的主要入口,它接收一个整型数组作为参数。
2. `partition`函数用于选择一个基准值(pivot),并将数组分为两部分:小于基准值的部分和大于基准值的部分。这个过程通过两个指针i和j完成,分别从两端开始,当找到合适的元素交换位置后,继续移动指针。
3. 最后,在`main`函数中,我们先创建一个ArrayList来存储随机生成的整数,并确保不重复。然后将其转换为数组,调用`quickSort`函数进行排序,并打印排序前后的结果。
阅读全文