快速排序实施尝试

时间:2016-12-17 08:57:50

标签: java quicksort

在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);
           }
         }

      }
}

2 个答案:

答案 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(等于可以是任何一种方式)。如果快速排序算法有两个部分,partitionquicksort。 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