题目:排序程序,编写一个多线程,先产生一个随机整数n(大于10),再产生n个随机数并存放于数组中,然后创建两个线程并发地对所生成的随机数分别进行排序,其中一个线程要求采用冒泡排序法进行排序,另一个线程要求采用快速排序法进行排序,然后比较这两个线程排序的结果,并输出先完成排序的线程100分啊!!!!!!!!!

解决方案 »

  1.   

    public class Test
    {
    private int i,j;
    private int[] numbers;

    public Test()
    {
    i=100+(int)(Math.random()*50);
    numbers=new int[i];
    for(j=0;j<i;j++)
    {
    numbers[j]=(int)(Math.random()*200);
    }
    }
    public int[] getNumbers()
    {
    return numbers;
    }

    public static void main(String[] args)
    {
    test t=new test();
    new BubbleSort(t.getNumbers()).start();
    new QuickSort(t.getNumbers()).start();
    }

    }class BubbleSort extends Thread
    {
    private int i,j;
    private int[] numbers;
    private int length;
    public BubbleSort(int[] numbers)
    {
    this.numbers=numbers;
    length=numbers.length;
    }

    public void bubbleSort()
    {

    for(j=length-1;j>=0;j--)
    {
    for(i=0;i<j;i++)
    {
    if(numbers[i]>numbers[j])
    {
    int temp=numbers[i];
    numbers[i]=numbers[j];
    numbers[j]=temp;
    }
    }
    }
    for(i=0;i<length;i++)
    {
    System.out.println("bubble: "+numbers[i]);
    }
    }
    public void run()
    {
    bubbleSort();
    }
    }class QuickSort extends Thread
    {
    private int[] numbers;
    private int p,r,i;
    private int length;
    public QuickSort(int[] numbers)
    {
    this.numbers=numbers;

    length=numbers.length;
    }
    public void quickSort(int p,int r)
    {
    int q;
    if(p<r)
    {
        q=partition(p,r);
        quickSort(p,q-1);
        quickSort(q+1,r);

    }
    }
    public int partition(int p,int r)
    {
      int x,i,j,temp;
      x=numbers[r];
      i=p-1;
      for(j=p;j<r;j++)
      {
        if(numbers[j]<=x)
        {
          i=i+1;
          temp=numbers[i];
          numbers[i]=numbers[j];
          numbers[j]=temp;
        }
      }
      temp=numbers[i+1];
      numbers[i+1]=numbers[r];
      numbers[r]=temp;
      return i+1;
    }
    public void run()
    {
    quickSort(0,length-1);
    for(i=0;i<length;i++)
    {
    System.out.println("            quick: "+numbers[i]);
    }
    }

    }
    不知道合不合你的要求。。我初始化了 大于100个数。。哪个线程先运行完,自己看结果吧。
      

  2.   

    aim to get usable point!
      

  3.   

    1楼的...JAVA好象什么排序算法都有吧...有内置的算法,咱们能用就用嘛...