如果第一个元素是最大的,同时将第一个元素视为pivot,则在java中运行快速排序

时间:2015-09-24 17:00:23

标签: java c++ algorithm quicksort

我在java中为quicksort编写了一个代码,同时将第一个元素视为pivot。如果我将第一个元素视为数组的最大元素,那么代码会给出一个ArrayOutOfBoundsException。虽然在C ++中实现相同的逻辑时逻辑运行正常。

import java.util.Scanner;

class QSort
{
    private int n;
    private int a[] = new int[n];

    public QSort(int[] x)
    {
        n = x.length;
        a = x;
    }

    private int qs(int low,int up)
    {
        int pivot = a[low];
        int p = low+1,q = up;
        while(q>=p)
        {
            while(pivot>=a[p])
                p++;
            while(pivot<a[q])
                q--;
            if(q>p)
            {
                a[p]=a[p]+a[q]-(a[q]=a[p]); //swapping(a[p],a[q])
                p++;
                q--;
            }
        }
        a[low]=a[low]+a[q]-(a[q]=a[low]);   //swapping(a[low],a[q])
        return q;
    }
    public void quicksort(int low,int up)
    {
        if(low<up)
        {
            int i = qs(low,up);
            quicksort(low,i-1);
            quicksort(i+1,up);
        }
    }
    public void print()
    {
        System.out.println("\nThe sorted array is :");
        for(int i=0; i<a.length; i++)
        {
            System.out.println(a[i]);
        }
    }
}

class Quick
{
    public static void main(String args[])
    {
        System.out.print("\nEnter the no. of values : ");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int x[] = new int[n];
        System.out.println("\nEnter the elements :");
        for(int i=0; i<n; i++)
            x[i] = sc.nextInt();
        QSort s = new QSort(x);
        s.quicksort(0,n-1);
        s.print();
    }
}

0 个答案:

没有答案