快排非遞歸


import java.util.Arrays;

public class TestQuickSort {

    public static int partion(int []array,int low,int hign){

        int tmp=array[low];
        while(low<hign){
            while(low<hign&&array[hign]>=tmp){
                --hign;
            }
            if(low>=hign){
                break;
            }else{
                array[low]=array[hign];
            }
            while(low<hign&&array[low]<=tmp){
                ++low;
            }
            if(low>=hign){
                break;
            }else{
                array[hign]=array[low];
            }

        }
        array[low]=tmp;
        return low;

    }
    //快速排序的非遞歸用棧來做
    public static void QuickSort(int[]array){
        int[]stack=new int[array.length];
        int top=0;
        int low=0;
        int hign=array.length-1;
        int par=partion(array,low,hign);
        //入棧
        if(par>low+1){
            stack[top++]=low;
            stack[top++]=par-1;
        }
        if(par<hign-1){
            stack[top++]=par+1;
            stack[top++]=hign;
        }
        //出棧
        while(top>0){
            hign=stack[--top];
            low=stack[--top];
            par=partion(array,low,hign);
            if(par>low+1){
                stack[top++]=low;
                stack[top++]=par-1;
            }
            if(par<hign-1){
                stack[top++]=par+1;
                stack[top++]=hign;

            }

        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[]array={20,3,5,0,32,22,11,8,7,9};
        QuickSort(array);
        System.out.println(Arrays.toString(array));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章