剑指offer-问题33

package offer;

import java.util.Comparator;

/**
 * offer interview 33
 */
public class Test33 {

    public static class MComparator implements Comparator<String>{

        @Override
        public int compare(String o1,String o2){
            if (o1 == null || o2 == null){
                throw new IllegalArgumentException("Arg should not be null.");
            }

            String s1 = o1 + o2;
            String s2 = o2 + o1;

            return s1.compareTo(s2);
        }

    }

    private static void quickSort(String[] array,int start,int end, Comparator<String> comparator){
        if (start < end){
            String pivot = array[start];
            int left = start;
            int right = end;

            while (start < end){
                while (start < end && comparator.compare(array[end],pivot) >= 0){
                    end--;
                }
                array[start] = array[end];
                while (start < end && comparator.compare(array[start],pivot) <= 0){
                    start++;
                }
                array[end] = array[start];
            }

            array[start] = pivot;

            quickSort(array,left,start-1,comparator);
            quickSort(array,start+1,end,comparator);
        }
    }

    public static String printMinNumber(String[] array){
        if (array == null || array.length < 1){
            throw new IllegalArgumentException("Array must contain value.");
        }

        MComparator comparator = new MComparator();
        quickSort(array,0,array.length -1 , comparator);

        StringBuilder builder = new StringBuilder(256);
        for (String s : array){
            builder.append(s);
        }

        return builder.toString();
    }

    public static void main(String[] args){
        String[] data = {"3", "5", "1", "4", "2"};
        System.out.println(printMinNumber(data));

        String[] data2 = {"3", "32", "321"};
        System.out.println(printMinNumber(data2));

        String[] data3 = {"3", "323", "32123"};
        System.out.println(printMinNumber(data3));

        String[] data4 = {"1", "11", "111"};
        System.out.println(printMinNumber(data4));

        String[] data5 = {"321"};
        System.out.println(printMinNumber(data5));
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值