https://www.lintcode.com/problem/string-sorting/description
给定一个以逗号分隔开的单词组成的字符串,单词只由小写字母构成。要求返回同样以逗号分隔开的单词组成的字符串,单词按字典序排序。
用快速排序。代码如下:
public class Solution { /** * @param s: string * @return: sort string in lexicographical order */ public String sorting(String s) { // write your code here // 按逗号分隔开 String[] ss = s.split(","); quickSort(ss, 0, ss.length - 1); // join回去并返回 return String.join(",", ss); } private void quickSort(String[] ss, int l, int r) { if (l >= r) { return; } swap(ss, l, l + (r - l >> 1)); String piv = ss[l]; int i = l, j = r; while (i < j) { while (i < j && ss[j].compareTo(piv) >= 0) { j--; } ss[i] = ss[j]; while (i < j && ss[i].compareTo(piv) <= 0) { i++; } ss[j] = ss[i]; } ss[i] = piv; // 递归排序左右半边 quickSort(ss, l, i - 1); quickSort(ss, i + 1, r); } private void swap(String[] ss, int i, int j) { String tmp = ss[i]; ss[i] = ss[j]; ss[j] = tmp; } }时间复杂度 O ( l n log n ) O(ln\log n) O(lnlogn),空间 O ( log n ) O(\log n) O(logn), n n n为单词数量, l l l为单词最长长度。