荷兰国旗问题

2019-02-23  本文已影响0人  霍运浩

1.荷兰国旗问题

传入num 数组中大于num的数放左边 小于num的数放右边 等于num的数 放中间

1.1 结题思路

构造三个变量 cur指针指向arr[0]
less指针指向arr[-1] less 是全部比num小的数
more 指针指向arr[lentgh] more是全部比num大的数
1 当arr[cur]==num cur++;
2 当arr[cur]>num 交换arr[--more]与arr[cur]
3 当arr[cur]<num 交换arr[++less]与arr[cur ] 并且cur++
循环此过程 直到cur==more为止

public static int[] partition(int arr[],int l,int r,int num){
        
        int less=l-1;
        int more=r+1;
        int cur=l;
        while(cur<more){
            if(arr[cur]<num){
                swap(arr,++less,cur++);
            }else if(arr[cur]>num){
                
                swap(arr,--more,cur);
            }else{
                cur++;
            }
            
        }
        return new int[]{less+1,more-1};
        
    }
上一篇下一篇

猜你喜欢

热点阅读