java多线程排序实验
时间: 2023-10-08 07:06:56 浏览: 177
以下是一个简单的 Java 多线程排序实验:
```java
import java.util.Random;
public class MultiThreadedSort {
public static void main(String[] args) {
int[] arr = generateRandomArray(10000); // 生成长度为 10000 的随机整数数组
long startTime = System.currentTimeMillis();
MultiThreadedSorter sorter = new MultiThreadedSorter(arr);
sorter.sort();
long endTime = System.currentTimeMillis();
System.out.println("排序完成,耗时:" + (endTime - startTime) + "ms");
}
public static int[] generateRandomArray(int length) {
int[] arr = new int[length];
Random random = new Random();
for (int i = 0; i < length; i++) {
arr[i] = random.nextInt(length);
}
return arr;
}
}
class MultiThreadedSorter {
private int[] arr;
public MultiThreadedSorter(int[] arr) {
this.arr = arr;
}
public void sort() {
sort(0, arr.length - 1);
}
private void sort(int left, int right) {
if (left >= right) {
return;
}
int pivot = partition(left, right); // 分区
// 创建两个线程分别对左半部分和右半部分进行排序
Thread leftThread = new Thread(() -> sort(left, pivot - 1));
Thread rightThread = new Thread(() -> sort(pivot + 1, right));
leftThread.start();
rightThread.start();
try {
leftThread.join(); // 等待左半部分排序完成
rightThread.join(); // 等待右半部分排序完成
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private int partition(int left, int right) {
int pivotIndex = (left + right) / 2;
int pivotValue = arr[pivotIndex];
swap(pivotIndex, right); // 将 pivot 放到最右边
int storeIndex = left;
for (int i = left; i < right; i++) {
if (arr[i] < pivotValue) {
swap(i, storeIndex);
storeIndex++;
}
}
swap(storeIndex, right); // 将 pivot 放到正确的位置
return storeIndex;
}
private void swap(int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
这个实验使用了快速排序算法,并且使用多线程对数组进行排序。在 `sort` 方法中,我们先对整个数组进行一次分区操作,然后再创建两个线程分别对左半部分和右半部分进行排序,并使用 `join` 方法等待这两个线程完成。这样就可以并行地对数组进行排序了。
阅读全文