C++ 按长度合并排序字符串数组
我试图对从.txt读入的一组非常大的字符串进行排序,并对它们进行排序。到目前为止,我可能能够按字母顺序对它们进行排序,但我不知道如何先按长度排序,然后再按字母顺序排序。这是我到目前为止的代码,希望有人能解释一下。谢谢C++ 按长度合并排序字符串数组,c++,sorting,mergesort,C++,Sorting,Mergesort,我试图对从.txt读入的一组非常大的字符串进行排序,并对它们进行排序。到目前为止,我可能能够按字母顺序对它们进行排序,但我不知道如何先按长度排序,然后再按字母顺序排序。这是我到目前为止的代码,希望有人能解释一下。谢谢 int lower = 0; int upper = sizeof(dataSetForSort) - 1; int middle = (lower + upper)/2; string Temp[sizeof(dataSetForSort)]; int i = lower,
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]);
}
int-lower=0;
int upper=sizeof(dataSetForSort)-1;
中间整数=(下+上)/2;
字符串温度[sizeof(dataSetForSort)];
int i=较低,j=中间+1,k=较低;
而(i在比较中,您可以更改为以下内容,以便首先按长度排序,如果长度相等,则按字母顺序排序:
if( dataSetForSort[i].size() < dataSetForSort[j].size() ||
(dataSetForSort[i].size() == dataSetForSort[j].size() &&
dataSetForSort[i] < dataSetForSort[j]) )
if(dataSetForSort[i].size()
在比较中,您可以更改为以下内容,以便首先按长度排序,如果长度相等,则按字母顺序排序:
if( dataSetForSort[i].size() < dataSetForSort[j].size() ||
(dataSetForSort[i].size() == dataSetForSort[j].size() &&
dataSetForSort[i] < dataSetForSort[j]) )
if(dataSetForSort[i].size()
在比较中,您可以更改为以下内容,以便首先按长度排序,如果长度相等,则按字母顺序排序:
if( dataSetForSort[i].size() < dataSetForSort[j].size() ||
(dataSetForSort[i].size() == dataSetForSort[j].size() &&
dataSetForSort[i] < dataSetForSort[j]) )
if(dataSetForSort[i].size()
在比较中,您可以更改为以下内容,以便首先按长度排序,如果长度相等,则按字母顺序排序:
if( dataSetForSort[i].size() < dataSetForSort[j].size() ||
(dataSetForSort[i].size() == dataSetForSort[j].size() &&
dataSetForSort[i] < dataSetForSort[j]) )
if(dataSetForSort[i].size()
您需要定义一个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;
}
bool lessthan(常量标准:字符串和左手侧,常量标准:字符串和右手侧)
{
//按长度排序
if(left_hand_side.length()right_hand_side.length())返回false;
//按字母排序
如果(左侧<右侧)返回true;
如果(左侧>右侧)返回false;
返回false;
}
这可以由std::sort使用,也可以根据您的要求生成运算符您需要定义一个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;
}
bool lessthan(常量标准:字符串和左手侧,常量标准:字符串和右手侧)
{
//按长度排序
if(left_hand_side.length()right_hand_side.length())返回false;
//按字母排序
如果(左侧<右侧)返回true;
如果(左侧>右侧)返回false;
返回false;
}
这可以由std::sort使用,也可以根据您的要求生成运算符您需要定义一个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;
}
bool lessthan(常量标准:字符串和左手侧,常量标准:字符串和右手侧)
{
//按长度排序
if(left_hand_side.length()right_hand_side.length())返回false;
//按字母排序
如果(左侧<右侧)返回true;
如果(左侧>右侧)返回false;
返回false;
}
这可以由std::sort使用,也可以根据您的要求生成运算符您需要定义一个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;
}
bool lessthan(常量标准:字符串和左手侧,常量标准:字符串和右手侧)
{
//按长度排序
if(left_hand_side.length()right_hand_side.length())返回false;
//按字母排序
如果(左侧<右侧)返回true;
如果(左侧>右侧)返回false;
返回false;
}
这可以由std::sort使用,也可以根据您的要求生成运算符我需要创建一个字符串minValue以便与元素进行比较并交换吗?我仍然不太了解按长度对它们进行合并排序的实际过程…编辑:等等,我开始了解您现在所说的内容,但仍然需要一些解释。…我不知道你所说的minValue
string是什么意思,但是对于你展示的代码,它似乎并不需要。合并排序的解释是一个单独的问题,你可以在这里尝试阅读,我是否需要创建一个字符串minValue以便与元素进行比较并交换?我仍然不太了解合并排序的实际过程按长度排列…编辑:等等,我开始了解你现在说的内容,但仍然需要一些解释…我不确定你所说的minValue
string是什么意思,但对于你展示的代码来说,它似乎不需要。合并排序的解释是一个单独的问题,你可以在这里尝试阅读,我需要创建一个字符串minVal吗ue以便我可以将其与元素和交换进行比较?我仍然不太了解按长度对它们进行合并排序的实际过程…编辑:等等,我有点开始了解您现在所说的内容,但仍然需要一些解释…我不确定您所说的minValue
string是什么意思,但对于您显示的代码,它似乎并不需要。合并排序的解释是一个单独的问题,你可以试着在这里阅读,我是否需要创建一个字符串minValue,这样我就可以将它与元素和交换进行比较?我仍然不太了解按长度对它们进行合并排序的实际过程…编辑:等等,我开始了解你现在说的内容,但仍然需要一些解释…我我不知道你所说的minValu是什么意思