我正在尝试练习如何在数组上运行快速排序。但是,当我运行我的程序时,数组没有完全排序(请参阅输出),我不完全确定问题可能在哪里。我认为错误可能出在分区方法中。
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秒)
答案 0 :(得分:2)
只是一个小错误:
if (a[index]<pivot) {
应该是:
if (a[i]<pivot) {
其余的看起来很好。