在youtube上观看此视频后,我试图编写一个quicksort实现。 https://www.youtube.com/watch?v=MZaf_9IZCrc&t=215s但它不起作用。有人能告诉我我做错了什么吗?谢谢 Ferda
public class Trial{
public static void main(String []args){
int arr[] = {7, 3, 4, 2, 6, 1, 5};
quickSort(arr, 0, 6);
}
public static void quickSort(int[] arrInput, int start, int end){
int arr[] = new int[end-start+1];
for(int i=start, j=0; i<end; i++, j++){
arr[j]=arrInput[i];
}
int size = arr.length;
int pivotValue = arr[size-1];
for (int i=-1; i<arr.length; i++){
for(int j=0; j<arr.length; j++){
if(arr[j]< pivotValue){
int temp = arr[j];
i++;
arr[j] = arr[i];
arr[i] = temp;
}
for(int p = i; p< size-2; p++ ){
arr[p+1] = arr[p];
}
arr[i] = pivotValue;
quickSort(arr, 0, i);
quickSort(arr, i+1, size-1);
}
}
}
}
答案 0 :(得分:0)
Quicksort是这样的:
public static void quicksort(int[] array, int begin, int end) {
if (array == null || array.length() == 0) {
return;
}
int pivot = partition(array);
quicksort(array, 0, pivot);
quicksort(array, pivot + 1, array.length);
}
public static void quicksort(int[] array) {
quicksort(array, 0, array.length());
}
之后,您可以使用视频实现分区方法
答案 1 :(得分:0)
你在这里提到的视频讲述了分区机制。所以元素值小于pivot的元素在pivot之前,元素值大于pivot之后是pivot(等于可以是任何一种方式)。如果快速排序算法有两个部分,partition
和quicksort
。 Quicksort是in place sort
,您不需要在此处创建新数组。并且您选择最后一个元素作为pivot元素,您可以按照下面给出的伪代码来实现quicksort:
quicksort(A, lo, hi) is
if lo < hi then
p := partition(A, lo, hi)
quicksort(A, lo, p – 1)
quicksort(A, p + 1, hi)
partition(A, lo, hi) is
pivot := A[hi]
i := lo // place for swapping
for j := lo to hi – 1 do
if A[j] ≤ pivot then
swap A[i] with A[j]
i := i + 1
swap A[i] with A[hi]
return i