Java – quicksort partitioning algorithm

I'm trying to write a quick sort algorithm using the cormen algorithm textbook Here is my code

class Quicksort
{
    public void qSort(int[] a,int p,int r)
    {
        if(p<r)
        {
            int q = Partition(a,p,r);
            qSort(a,q-1);
            qSort(a,q+1,r);
        }
     }

     private int Partition(int[] a,int r)
     {
         int x = a[r];

         int i = p-1;
         int temp=0;

         for(int j=p; j<r-1; j++)
         {
             if(a[j]<=x)
             {
                 i++;
                 temp = a[i];
                 a[i] = a[j];
                 a[j] = temp;
             }
         }

         temp = a[i+1];
         a[i+1] = a[r];
         a[r] = temp;
         return (i+1);
     }
}

public class QuickSortTest
{
     public static void main(String[] args)
     {
         Quicksort qsort = new Quicksort();
         int[] array = {5,4,7,2,1,9,3,6,10,8};

         System.out.print("Original  Array : ");
         for(int i=0; i<array.length;i++)
         {
             System.out.print(array[i] + " ");
         }

         int length = array.length;

         qsort.qSort(array,length-1);

         System.out.print("Sorted  Array : ");
         for(int i=0; i<array.length;i++)
         {
             System.out.print(array[i] + " ");
         }
     }
}

However, when I execute this code, an error is output

Original  Array : 5 4 7 2 1 9 3 6 10 8 
Sorted  Array : 1 4 5 2 6 7 3 8 9 10

Anyone can explain what's wrong I implemented this code completely according to the instructions in the book "Introduction to algorithm" thank you.

Solution

No, you didn't copy it directly:) I'm here

for(int j=p; j<r-1; j++)

should

for(int j=p; j<r; j++)

or

for(int j=p; j <= r-1; j++)

The book reads:

for j = p to r - 1

This includes R – 1 And remember that the array of this book starts with 1 instead of 0 So generally speaking, the algorithms in this book should be very careful to "copy" or arrays starting from 1

Editor: for information about the review algorithm, the algorithm in the book uses the last element as the pivot Therefore, for sorted arrays, it will become a terrible algorithm It will end with O (n ^ 2), so no one should use this algorithm in production (unless you know what you're doing and what your input is), because arrays often have some sort Java's built-in algorithm is smarter, and you can read it in Javadoc

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>