Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何针对输入的大量字符串优化代码_C++_Sorting_Optimization_Quicksort - Fatal编程技术网

C++ 如何针对输入的大量字符串优化代码

C++ 如何针对输入的大量字符串优化代码,c++,sorting,optimization,quicksort,C++,Sorting,Optimization,Quicksort,我通过了大学编译器的4次测试,问题是第5次。每次测试的时间限制为1秒。如何优化此代码,如果比较字符串,可能有更好的排序选项?我的代码: #include <iostream> #include <string.h> using namespace std; void qsort(string &tab, int min, int max) { if(min<max) { int min_min = min;

我通过了大学编译器的4次测试,问题是第5次。每次测试的时间限制为1秒。如何优化此代码,如果比较字符串,可能有更好的排序选项?我的代码:

#include <iostream>
#include <string.h>

using namespace std;

void qsort(string &tab, int min, int max)
{
    if(min<max)
    {
        int min_min = min;
        for(int i=min+1;i<=max;i++)
        {
            if(tab[i]<tab[min])
            {
                swap(tab[++min_min],tab[i]);
            }
        }
        swap(tab[min],tab[min_min]);
        qsort(tab,min,min_min-1);
        qsort(tab,min_min+1,max);

    }
}
bool sprawdz(string tab,string tab2)
{
    for(int i=0;i<tab.length();i++)
    {
        if(tab[i]!=tab2[i])
        {
            return false;
            break;
        }
    }
    return true;
}

int main()
{
    string tablica1, tablica2;
    int ile;

    scanf("%d",&ile);
    for(int i=0;i<ile;i++)
    {
        cin>>tablica1>>tablica2;
        qsort(tablica1,0,tablica1.length()-1);
        qsort(tablica2,0,tablica2.length()-1);

        if(tablica1==tablica2)
        {
            printf("TAK\n");
        }
        else
        {
            printf("NIE\n");
        }


    }

    return 0;
}
#包括
#包括
使用名称空间std;
void qsort(字符串和选项卡,最小整数,最大整数)
{
如果(最小值)
如果我比较字符串,可能有更好的排序选项

我最喜欢的小贴士:做某事的最佳方式是不去做;)

您不必对字符串进行排序来检查它们是否是字谜。顺序对于字谜来说并不重要,那么为什么要对它们进行排序呢

排序通常是
O(n log n)
,而简单地计算字符的频率是
O(n)
。要计算字符数,可以使用
std::unordered_map
,或者如果不允许,可以使用计数器数组。遍历字符串以计算每个字符的出现次数,然后比较计数器数组


PS:在应用任何进一步的逻辑之前,您还应该检查字符串的大小是否相同。

不要按值传递字符串,并使用
std::sort
如果允许使用算法,那么什么是不按值传递字符串?@BartekJuśkiewicz他们的意思是:使用引用。我指的是
bool sprawdz(字符串选项卡,字符串选项卡2)
但您似乎没有使用该函数哦,是的,该函数没有用,我将其删除