2016-12-17 109 views
0

我試圖在YouTube上觀看此視頻後編寫快速排版實現。 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); 
      } 
     } 

     } 
} 
+1

快速排序算法是由三個部分組成,一部分叫做分區和thow其他部分,他們是兩個兩個遞歸調用分區數組的一部分 – thepaulo

+1

你看到關於分區數組 – thepaulo

回答

0

視頻,你講到這裏,講述分區機制。所以值小於樞軸的元素出現在樞軸之前,大於樞軸的元素值在樞軸之後出現(相等可以任意方向)。如果快速排序算法0​​和有兩個部分。 Quicksort是in place sort,您不需要在這裏創建新的數組。你選擇了最後一個元素作爲支點元素,你可以按照下面給出的僞代碼來實現快速排序:

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 
+0

的視頻謝謝我會試着解決我的實現中的問題根據這:) –

0

快速排序是這樣的事情:

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

之後,您可以使用您的視頻實現分區方法