快速排序二

Posted ssdut_yrp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序二相关的知识,希望对你有一定的参考价值。

public class ArrayIns 
    private long[] theArray;
    private int nElems;

    public ArrayIns(int max)
        theArray=new long[max];
        nElems=0;
    

    public void insert(long value)
        theArray[nElems]=value;
        nElems++;
    

    public int size()
        return nElems;
    

    public void display()
        System.out.print("A=");
        for(int j=0;j<nElems;j++)
            System.out.print(theArray[j]+" ");
        System.out.println("");
    

    public int partitionIt(int left,int right,long pivot)
        int leftPtr=left;
        int rightPtr=right-1;
        while(true)
            while(theArray[++leftPtr]<pivot)
            
            while(theArray[--rightPtr]>pivot)
            
            if(leftPtr>=rightPtr)
                break;
            else
                swap(leftPtr,rightPtr);
            
        
        swap(leftPtr,right-1);
        return leftPtr;
    

    public void swap(int dex1,int dex2)
        long temp=theArray[dex1];
        theArray[dex1]=theArray[dex2];
        theArray[dex2]=temp;
    



    public void quickSort()
        recQuickSort(0,nElems-1);
    

    public void recQuickSort(int left,int right)
        int size =right-left+1;
        if(size<=3)
            manualSort(left,right);
        else
            long median=medianOf(left,right);
            int partition = partitionIt(left,right,median);
            recQuickSort(left,partition-1);
            recQuickSort(partition+1,right);
        
    

    public void manualSort(int left,int right)
        int size=right-left+1;
        if(size<=1)
            return;
        if(size==2)
            if(theArray[left]>theArray[right])
                swap(left,right);
            
            return;
        
        else
            if(theArray[left]>theArray[right-1])
                swap(left,right-1);
            
            if(theArray[left]>theArray[right])
                swap(left,right);
            
            if(theArray[right-1]>theArray[right])
                swap(right-1,right);
            
        

    

    public long medianOf(int left,int right)
        int center=(left+right)/2;
        if(theArray[left]>theArray[center])
            swap(left,center);
        
        if(theArray[left]>theArray[right])
            swap(left,right);
        
        if(theArray[center]>theArray[right])
            swap(center,right);
        
        swap(center,right-1);
        return theArray[right-1];
    
public class QuickSortApp 
    /**
     * @param args
     */
    public static void main(String[] args) 
        // TODO Auto-generated method stub
        int maxSize=16;
        ArrayIns arr;
        arr = new ArrayIns(maxSize);
        for(int j=0;j<maxSize;j++)
            long n=(int)(Math.random()*99);
            arr.insert(n);
        
        arr.display();
        arr.quickSort();
        arr.display();
    

以上是关于快速排序二的主要内容,如果未能解决你的问题,请参考以下文章

快速排序二

数据结构和算法之排序二:快速排序

排序算法二(归并排序快速排序希尔排序)

五种排序算法整理 二(堆排序,快速排序插入排序选择排序冒泡排序)

快速排序二

快速排序二