Java 与快速排序算法混淆
我正在实现一个快速排序算法,并成功地围绕一个轴对输入数组进行了分区。问题是,我不知道如何使用相同的输入数组对数组的第一部分和第二部分进行递归排序(即指定范围)。 下面是我的实现Java 与快速排序算法混淆,java,Java,我正在实现一个快速排序算法,并成功地围绕一个轴对输入数组进行了分区。问题是,我不知道如何使用相同的输入数组对数组的第一部分和第二部分进行递归排序(即指定范围)。 下面是我的实现 class QuickSort { int i; int l = 0; public void quicksort(int A[], int n) { if (n == 1) { return; } else {
class QuickSort {
int i;
int l = 0;
public void quicksort(int A[], int n) {
if (n == 1) {
return;
} else {
partition(A, 0, n);
//----Confused as from this point
quicksort(A, A[i]);
//Recursively sort both parts of the array
}
}
public int partition(int A[], int l, int r) {
int p = A[l];//Choose pivot
i = l + 1;
//Partition around A through P
for (int j = i; j < r; j++) {
if (A[j] < p) {
swap(A, i, j);
++i;
}
}
swap(A, l, i - 1 );
return i;
}
public void swap(int A[], int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
public void display(int A[]){
for (int i = 0; i < A.length; i ++){
System.out.print(A[i] + " ");
}
}
}
class QuickSortApp{
public static void main(String args[]){
QuickSort quick = new QuickSort();
int A[] = {6,2,7,8,4,3,5};
quick.quicksort(A, A.length);
quick.display(A);
}
}
类快速排序{
int i;
int l=0;
公共void快速排序(int A[],int n){
如果(n==1){
返回;
}否则{
分区(A,0,n);
//----从这一点上看,我感到困惑
快速排序(A,A[i]);
//对数组的两部分进行递归排序
}
}
公共整数分区(整数A[],整数l,整数r){
int p=A[l];//选择轴
i=l+1;
//围绕A到P的分区
对于(int j=i;j
请允许我纠正我算法中的任何其他低效之处。谢谢使用您拥有的签名为快速排序调用创建一个包装器,它调用另一个类似于
快速排序(a,i,j)
的函数,您从包装器发出的调用将是快速排序(a,0,n)
将快速排序()
签名更改为快速排序(int[]a,int-begin,int-end)
因为,您实际上在分区()中进行了排序。我要做的是:
if (end-begin <= 1) {
return;
} else {
int pivot = partition(A, begin, end);
quicksort(A, begin, pivot);
quicksort(A, pivot, end);
}
if(end)begin请详细说明一下。