题解 | #字符串排序#

字符串排序

http://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723

import java.util.*;
public class Main {
    /**********************************************************************************/
    // 自定义比较器
    public static class ComparaString implements Comparator<String> {
        public int compare(String str1, String str2) {
            int len1 = str1.length();
            int len2 = str2.length();
            int p1 = 0;
            int p2 = 0;
            char[] chrs1 = str1.toCharArray();
            char[] chrs2 = str2.toCharArray();
            while (p1 < len1 && p2 < len2) {
                if (chrs1[p1] < chrs2[p2]) {
                    return -1;
                } else if (chrs1[p1] > chrs2[p2]) {
                    return 1;
                } else {
                    p1++;
                    p2++;
                }
            }
            if (len1 < len2) {
                return -1;
            } else if (len1 > len2) {
                return 1;
            } else {
                return 0;
            }
        }
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = Integer.valueOf(scan.nextLine().trim());
        ArrayList<String> arrayList = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            arrayList.add(scan.nextLine());
        }
        // 调用自定义的比较器进行排序
        arrayList.sort(new ComparaString());
        for (String str : arrayList) {
            System.out.println(str);
        }
        // 调用自己实现的快速排序算法
        /*
        String[] strs = new String[arrayList.size()];
        for (int i = 0; i < arrayList.size(); i++) {
            strs[i] = arrayList.get(i);
        }
        quickSort(strs);
        for (String str : strs) {
            System.out.println(str);
        }
        */
    }
    /**********************************************************************************/
    // 快速排序算法
    public static void quickSort(String[] strs) {
        if (null == strs || strs.length < 2) {
            return;
        }
        process(strs, 0, strs.length - 1);
    }
    public static void process(String[] strs, int start, int end) {
        if (start > end) {
            return;
        }
        int l = start - 1;
        int r = end + 1;
        int p = start;
        String str = strs[end];
        while (p < r) {
            if (compare(strs[p], str) == -1) {
                swap(strs, p++, ++l);
            } else if (compare(strs[p], str) == 1) {
                swap(strs, p, --r);
            } else {
                p++;
            }
        }
        process(strs, start, l);
        process(strs, r, end);
    }
    public static void swap(String[] strs, int p1, int p2) {
        String tmp = strs[p1];
        strs[p1] = strs[p2];
        strs[p2] = tmp;
    }
    public static int compare(String str1, String str2) {
        int len1 = str1.length();
        int len2 = str2.length();
        int p1 = 0;
        int p2 = 0;
        char[] chrs1 = str1.toCharArray();
        char[] chrs2 = str2.toCharArray();
        while (p1 < len1 && p2 < len2) {
            if (chrs1[p1] < chrs2[p2]) {
                return -1;
            } else if (chrs1[p1] > chrs2[p2]) {
                return 1;
            } else {
                p1++;
                p2++;
            }
        }
        if (len1 < len2) {
            return -1;
        } else if (len1 > len2) {
            return 1;
        } else {
            return 0;
        }
    }
}
全部评论
该牛油正在参与牛客写题解薅羊毛的活动,牛币,周边,京东卡超多奖品放送,活动进入倒计时!快来捡漏啦https://www.nowcoder.com/discuss/888949?source_id=profile_create_nctrack&channel=-1
点赞 回复 分享
发布于 2022-04-20 16:36

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务