按长度排序字符串数组

Merge Sort string array by length

本文关键字:字符串 数组 排序      更新时间:2023-10-16

我正试图对从.txt中读取的一组非常大的字符串进行排序并对它们进行排序。到目前为止,我可能能够按字母顺序对它们进行排序,但我不知道如何先按长度排序,然后再按字母顺序排序。这是我的代码到目前为止,希望有人能对它有所启发。谢谢!

int lower = 0; 
int upper = sizeof(dataSetForSort) - 1;
int middle = (lower + upper)/2;
string Temp[sizeof(dataSetForSort)];

int i = lower, j = middle + 1 , k = lower;
while(i <= middle && j <= upper)
{
    if( dataSetForSort[i] < dataSetForSort[j] )
    {
        Temp[k].assign(dataSetForSort[i]);
        i++;
    }
    else
    {
        Temp[k].assign(dataSetForSort[j]);
        j++;
    }
    k++;
}
if(i > middle )
{
    for(int h = j ;h <= upper ; h++ )
    {
        Temp[k].assign(dataSetForSort[h]);
        k++;
    }
}
else
    for(int h = i; h<= middle ; h++ )
    {
        Temp[k].assign(dataSetForSort[h]);
        k++;
    }
    for(int i = lower; i <= upper ; i++)
    {
       dataSetForSort[i].assign(Temp[i]);
    }

在您的比较中,您可以更改为以下内容以便首先按长度排序,如果长度相等,则按字母顺序排序:

if( dataSetForSort[i].size() < dataSetForSort[j].size() ||
    (dataSetForSort[i].size() == dataSetForSort[j].size() && 
    dataSetForSort[i] < dataSetForSort[j]) )

您需要定义一个lessthan函数来返回正确的比较。

bool lessthan( const std::string & left_hand_side, const std::string &   right_hand_side )
{
     // sort by length
     if( left_hand_side.length() < right_hand_side.length() ) return true;
     if( left_hand_side.length() > right_hand_side.length() ) return false;
     // sort by alphabet
     if( left_hand_side < right_hand_side ) return true;
     if( left_hand_side > right_hand_side ) return false;
     return false;
}

这个可以被std::sort使用,或者根据你的需求做成一个操作符