我必须使用N(i=1..N)个线程来对M个数字的数组进行排序,每个线程从位置(N*i)%m开始对数组进行排序。有人能帮我吗?
发布于 2010-10-29 03:47:07
您需要做的是使用像quick sort这样的divide and conquer排序方法。
您需要做的是对数组进行分区,然后将数组的两部分传递给另一个线程进行处理。
假设你有号码:
11 43 24 56 12 65 90 12 53 23在一个线程中,您将对数字进行分区:
12 24 11 23 12 | 65 90 53 56 43然后,您可以在不同线程中对数组的每一半执行快速排序。
请允许我提供一些代码:
public void multiThreadSort(int threads, int[] arr, int start, int stop) {
if (threads > 1) {
int midpoint = partition(arr, start, stop);
new Thread(){public void run() {
multiThreadSort(threads - 1, arr, start, midpoint);
}}.start();
new Thread(){public void run() {
multiThreadSort(threads - 1, arr, midpoint, stop);
}}.start();
}
else
Arrays.sort(arr, start, stop);
}
public int partition(int[] arr, int start, int stop);然后这样叫它:
multiThreadSort(N, arr, 0, arr.length());https://stackoverflow.com/questions/4046600
复制相似问题