我如何在 C++ 中用整数对字符串进行排序?

How can i sort a string with integers in c++?

我想对一些相同大小的字符串进行排序。字符串的大小可以非常大 (10^18)。我怎样才能在更短的时间内对所有的刺进行分类?所有输入字符串的大小将相等。如何在尽可能短的时间内对这些字符串进行排序?

922003001020293839297830207344987344973074734
766352786207892397340783784078348747606208602
182823068326283756515117829362376823572395775
//the size of all the strings are equal

谁能解释一下更好的排序方式? 谢谢你的任何帮助将不胜感激。

碰巧一个仅包含数字的字符串可以按字母顺序排序,因此您只需将每个 string into a vector, and simply sort 向量。

如前所述,这仅在 "numbers" 都具有相同位数的情况下才有效。否则,您需要用前导零填充字符串,使它们的长度都相同。一旦对向量进行排序,就可以删除前导零。

这里用头算法中的std::sort完成了

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

int main(){

    std::vector<std::string> nums{
        "922003001020293839297830207344987344973074734",
        "766352786207892397340783784078348747606208602",
        "182823068326283756515117829362376823572395775"
    };


    std::cout << "unsorted: " << std::endl;
    for (auto i : nums){
        std::cout << i << std::endl;
    }

    std::sort(nums.begin(), nums.end()); //sort it


    std::cout << "\nsorted: " << std::endl;
    for (auto i : nums){
        std::cout << i << std::endl;
    }

    system("pause");
    return 0;
}

输出:

unsorted: 
922003001020293839297830207344987344973074734
766352786207892397340783784078348747606208602
182823068326283756515117829362376823572395775

sorted: 
182823068326283756515117829362376823572395775
766352786207892397340783784078348747606208602
922003001020293839297830207344987344973074734