我修改了快速排序以使其成为多线程。 我希望它能起作用,因为原来的算法是有效的。 分区后,对于枢轴左侧和右侧的递归调用..我正在创建一个新线程。
public class QuickSort extends Thread{
private int[] arr;
private int left;
private int right;
public QuickSort(int[] arr){
this.arr= arr;
this.left=0;
this.right=arr.length -1;
this.start();
}
public QuickSort(int[] arr, int left , int right){
this.arr= arr;
this.left=left;
this.right=right;
this.start();
}
int partition( int left, int right)
{
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
return i;
}
void quickSort(int left, int right) {
int index = partition(left, right);
if (left < index - 1)
new QuickSort(arr, left , index -1);
if (index < right)
new QuickSort(arr ,index, right);
}
public void run(){
quickSort(left , right);
}
public static void main(String arg[])
{
int[] s = {100,99,98,97,96,95,94,93,92,91};
new QuickSort(s);
for(int i: s)
System.out.println(i);
}
}
最佳答案
您的第一个问题是您没有等待任何线程退出,因此您在线程仍在运行时打印数据。您需要一些 Thread.join()
调用。
我并不是说没有其他问题......如果已经有已排序的元素,例如,您的排序就会失败。如果将 89,90 添加到测试数组中。
关于java - 多线程快速排序没有给出预期的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611894/