用巨大的字符串排序字母

时间:2012-05-04 19:10:15

标签: sorting

我有一个16 MB的文本文档,其中包含一个巨大的字母和数字字符串,没有任何分隔符。摘录:“as81jsa8sm1o1kmka9s93m1l”

是否有一种简单的方法可以将所有字符按字母顺序排列,而无需编写脚本?我担心JS会在文件的重压下崩溃。

感谢。

1 个答案:

答案 0 :(得分:1)

如果您知道字符串只包含字母和数字,则可以使用存储桶排序并获得良好的性能。

我不确定您使用的语言是什么,因此我假设您可以逐个字符地读取字符串。我的解决方案是psuedocode

int[] buckets = int[36]; // 26 for letters, 10 for numbers; assuming only lowercase characters
while(string.hasNext()) {
  char x = next character in string;
  if(x.isAlpha()) {
    buckets[x-'a']++;
  }else {
    buckets[26 + x - '0']++
  }

}

打印出已排序的字符串:

string s = ""; // at the end of the loops, s will contain the sorted string
for(int i =0 ; i < 26; ++i) {
  int y = buckets[i];
  for(int j = 0; j < y; ++j) {
    s+=(y+'a');
  }

}
for(int i =0 ; i < 10; ++i) {
  int y = buckets[i+26];
  for(int j = 0; j < y; ++j) {
    s+=(y+'0');
  }

}