我正在尝试用java编写一个使用线程的快速排序算法。但是,无论数组的长度如何,cpu利用率永远不会是100%。你能帮我找出这个问题吗?这是我的密码:
import java.util.Random;
public class Main {
public static void main(String[] args) {
int[] arr;
Random random = new Random();
arr = new int[53000000];
for (int i = 0; i < arr.length; i++){
arr[i] = random.nextInt();
}
SortThread sortThread = new SortThread(arr, 0, arr.length - 1);
Thread threadSort = new Thread(sortThread);
threadSort.start();
}
}
public class SortThread implements Runnable {
private int[] arr;
private int start;
private int end;
public SortThread(int[] arr, int start, int end) {
this.arr = arr;
this.start = start;
this.end = end;
}
@Override
public void run() {
if (start < end){
int partitionIndex = partition(arr, start, end);
SortThread sortThreadLeft = new SortThread(arr, start, partitionIndex - 1);
SortThread sortThreadRight = new SortThread(arr, partitionIndex + 1, end);
Thread sortLeft = new Thread(sortThreadLeft);
Thread sortRight = new Thread(sortThreadRight);
sortLeft.start();
sortRight.start();
}
}
private int partition(int arr[], int begin, int end){
int pivot = arr[end];
int i = (begin - 1);
for (int j = begin; j < end; j++){
if (arr[j] <= pivot ){
i++;
int swpTemp = arr[i];
arr[i] = arr[j];
arr[j] = swpTemp;
}
}
int swapTemp = arr[i + 1];
arr[i + 1] = arr[end];
arr[end] = swapTemp;
return i + 1;
}
}
在 Main
类i定义了具有随机元素的数组。在 SortThread
i类使用快速排序算法对数组进行排序。每个子数组在不同的线程中分别排序。从理论上讲,这应该占用每个cpu的所有处理能力。但实际上,不管数组的长度如何,只使用了40%。
1条答案
按热度按时间thigvfpy1#
我如何解决:
刚刚创建了executor并将它们全部添加到池中。