算法回马枪 荷兰国旗

何谓荷兰国旗:

现有红、白、蓝三个不同颜色的小球,乱序
排列在一起,请重新排列这些小球,使得红
白蓝三色的同颜色的球在一起。这个问题之
所以叫荷兰国旗,是因为我们可以将红白蓝
三色小球想象成条状物,有序排列后正好组
成荷兰国旗。

 

问题转化:

一个数组a,输入一个数n,请把小于n的数放在数组的左边,等于n的数放在数组的中间,大于n的数放在数组的右边。

 

 public static int[] partition(int []a,int low,int high,int n){
        int i=low-1;     //小于n的区域的边界指针
        int j=high+1;    //大于n的区域的边界指针
        int temp = low;  //遍历指针的出发点

        while(temp<j){   //temp与相遇,结束
            if(a[temp]<n){
                i++;      //小于n的区域的边界指针+1;
                swap(a,i,temp);
                temp++;   //temp指针后移
            }
            else if (a[temp] == n){
                temp++;   //temp指针后移
            }
            else{   //a[temp] > n
                j--;     //大于n的区域的边界指针-1;
                swap(a,temp,j);

            }
        }
        return  new int[] { less + 1, more - 1 };   //返回等于区域
    }

    public static void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

    public static void main(String []args){
        int []a={1,2,6,7,2,13,4};
        partition(a,0,6,6);
        for(int num: a){
            System.out.print(num+" ");
        }

    }

 

2人评论了“算法回马枪 荷兰国旗”

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部