2016-12-17 108 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()); 
} 

之后,您可以使用您的视频实现分区方法