java - 多线程快速排序没有给出预期的答案

标签 java multithreading quicksort

我修改了快速排序以使其成为多线程。 我希望它能起作用,因为原来的算法是有效的。 分区后,对于枢轴左侧和右侧的递归调用..我正在创建一个新线程。

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/

相关文章:

java - Swift 快速排序算法

c++ - 在动态数组上实现自己的快速排序

代码只接受输入值然后什么也不会发生

java - 使用java打开新选项卡

java - 如何在 java junit 测试类中并行运行一些测试用例并以串行方式运行一些测试用例?

multithreading - F#:在异步返回之前 SwitchToThreadPool 的目的

c# - 当其他线程正在使用字典时,在字典中合并修改的好方法是什么?

java - 当用户将命令行参数留空时如何正确显示错误?

java - Android JSON only OBJECT Fetching with Iteration

java - 如何让应用程序主线程进入休眠状态,以显示进度对话框的变化?