高速ソートの実装


【2020休日復習】
データのセット
 3 5 8 1 2 6 9 4 7 6
高速ソートが期待されるプロセスは、次のとおりです.(最終インデックスをpivotとします)
①3 5 8 1 2 6 9 4 7 6②3 5 4 4 1 2 6 8 6//交換8、4③3 5 4 1 2 6 8 9//交換9、6④交換3 5 4 4 1 2 6結果は変わらない⑤交換3 5 4 4 1 2 5 4 4 4 4 3 3//交換3、1 1 2 4 5//交換5、2⑥start sort:1 start sort:4 3 5 start sort:4 3 3 3 3 4 4//交換4、3
start sort:4⑦start sort:8 7 9 start sort:8 7 7 8//交換8、7
start sort :  8 result is: 1 2 3 4 5 6 6 7 8 9
 
実装は次のとおりです(同じvalueの相対順序は変更されません).
import java.io.*;
import java.util.*;

class FastSort
{


    public static void main(String[] args) throws Exception {
        int[] array={3,5,8,1,2,6,9,4,7,6};
        sort(array,0,array.length-1);
        println(array);
    }

    private static void println(int[] arr)
    {
        for(int i:arr)
            System.out.print(" "+i);
        System.out.println();
    }

    public static boolean sort(int[] src,int leftArg,int rightArg) throws Exception
    {
        System.out.println("start sort :");
        println(src);

        if(src.length==1)
            return true;

        if(leftArg>=src.length-1||rightArgpivot
        {
            //  right;
            while(right>left)
            {
                int rightValue=array[right];
                if(rightValue>=pivot)
                    right--;
                else break;
            }

            if(right<=left)
            {
                //  leftvalue pivot
                int leftValue=array[left];
                array[left]=pivot;
                array[array.length-1]=leftValue;
                System.out.print("switch left with pivot");
                println(array);

                //0~ left-1    
                int[] leftArray=new int[left];
                System.arraycopy(array,0,leftArray,0,left);
                if(!sort(leftArray,0,leftArray.length-2))
                    throw new Exception("left array sorted failed !"+ leftArray);

                //left+1 ~ end    
                int[] rightArray=new int[array.length-left-1];
                System.arraycopy(array,left+1,rightArray,0,array.length-left-1);
                if(!sort(rightArray,0,rightArray.length-2))
                    throw new Exception("left array sorted failed !"+ rightArray);

                System.arraycopy(leftArray,0,src,0,leftArray.length);
                System.arraycopy(rightArray,0,src,left+1,rightArray.length);
                src[left]=array[left];

                System.out.print("result is ");
                println(src);
                return true;

            }else
            {
                //rightValue