Recursive Quick Sort in java

若如初见. 提交于 2019-12-11 04:56:41

问题


This is my quicksort Code. It gives me a wrong answer but i think my partition function is correct.

public class Quick_Sort {

public static void main(String[] args) 
{

    int a[] = {99,88,5,4,3,2,1,0,12,3,7,9,8,3,4,5,7};
        quicksort(a, 0, a.length-1);
}

static int partition(int[] a, int low , int hi)
{
    int pivot = hi;
    int i =low;
    int j = hi-1;
    while(i<j)
    {
        if(a[i]<=a[pivot])
        {
            i++;
        }
        if(a[i]>a[pivot])
        {   
        if((a[i]>a[pivot]) && (a[j]<=a[pivot]))
        {
            int temp= a[i];
            a[i]=a[j];
            a[j]=temp;
            i++;    
        }
        if(a[j]>a[pivot])
        {
            j--;
        }
        }
    }
    int temp= a[i];
    a[i]=a[pivot];
    a[pivot]=temp;
    return i;
}
static void quicksort(int[] a, int low, int hi)
{
    if(low>=hi)
    {
        return;
    }
    int split = partition(a, low, hi);
    quicksort(a, low, split-1);
    quicksort(a, split+1, hi);
}
}

This is the final output:

1 0 3 2 3 4 4 5 5 7 3 7 8 9 12 88 99

Tried dry running it, couldn't see the error


回答1:


In your partition method you have assigned j to hi - 1. It should be set to hi only.

static int partition(int[] a, int low , int hi)
{
    int pivot = hi;
    int i =low;
//  int j = hi-1; // CHANGE THIS TO 
    int j = hi; // THIS 
    while(i<j)

I got this output after I made that change:

[0, 1, 2, 3, 3, 3, 4, 4, 5, 5, 7, 7, 8, 9, 12, 88, 99]

Hope this helps!




回答2:


This is a very good implementation and is much more Java standard. Maybe you want to take a look here, obviously all credits go to the original author.

http://www.vogella.com/tutorials/JavaAlgorithmsQuicksort/article.html




回答3:


This is C# code:

 public void RecursiveQuickSort(int[] array, int start, int end)
    {
        if (start < end)
        {
            int pivot = start;
            int left = start + 1;
            int right = end;

            while (true)
            {
                while (array[left] <= array[pivot] && left < right)
                    left++;
                while (array[right] > array[pivot] && left < right)
                    right--;
                if (left < right)
                {
                    Swap(array, left, right);
                }
                else
                {
                    pivot = (array[pivot] > array[left]) ? left : left - 1;
                    Swap(array, start, pivot);
                    RecursiveQuickSort(array, start, pivot - 1);
                    RecursiveQuickSort(array, pivot + 1, end);
                    return;
                }
            }
        }
    }

    private void Swap(int[] array, int index1, int index2)
    {
        int temp = array[index1];
        array[index1] = array[index2];
        array[index2] = temp;
    }


来源:https://stackoverflow.com/questions/42243597/recursive-quick-sort-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!