Quicksort不会正确排序数组

时间:2016-01-26 04:22:44

标签: java data-structures quicksort

我正在尝试练习如何在数组上运行快速排序。但是,当我运行我的程序时,数组没有完全排序(请参阅输出),我不完全确定问题可能在哪里。我认为错误可能出在分区方法中。

package qs;
import java.util.Random;

public class Qs {

public static final Random ran = new Random();
public int[] array;
public int elements;

public Qs(int[] a){
    this.array=a;
    this.elements=a.length;
}

public void swap( int i, int j){
    int temp=array[i];
    array[i]=array[j];
    array[j]=temp;
}

private int partition(int[] a, int start, int end){

    int index = start+ran.nextInt(end - start + 1); //set random index pivot value   
    int pivot = a[index];//sets the random pivot value
    swap(index, end); // puts random pivot value at the end of array
    for (int i= index = start; i < end; i++) {
        if (a[index]<pivot) {
            swap(index, i); 
            index++;
        }
    }
    swap(index, end);
    return index;
}

private void qsort(int[] a, int start, int end){
    if(end > start){
        int index = partition(a,start,end);
        qsort(a, start, index - 1);
        qsort(a, index + 1, end);
    }        
}

public void sort(){
    qsort(array, 0, elements-1);
}

public void print(){
    for(int i=0;i<array.length;i++){
        System.out.print(array[i]+" ");
    }
    System.out.println();
}



public static void main(String[] args) {
   int[] a ={5,23,69,55,448,3,78};        
   Qs q = new Qs(a);

   System.out.println("Original Array");
   q.print();
   q.sort();
   System.out.println("Sorted Array");
   q.print();

    }

}

该计划的输出:

原始阵列
5 23 69 55 448 3 78
分类阵列
3 5 23 55 78 69 448
建立成功(总时间:0秒)

1 个答案:

答案 0 :(得分:2)

只是一个小错误:

if (a[index]<pivot) {

应该是:

if (a[i]<pivot) {

其余的看起来很好。