加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 对字符串数组进行合并排序

发布时间:2020-12-16 07:33:41 所属栏目:百科 来源:网络整理
导读:我正在尝试使用合并排序算法对字符串数组进行排序.我编写了这段代码并且它适用于整数数组,但令人惊讶的是字符串数组却没有!它似乎只是排序数组的第二部分.我不知道是什么这段代码中有错!我将非常感谢您的帮助. #include iostream#include list#include str
我正在尝试使用合并排序算法对字符串数组进行排序.我编写了这段代码并且它适用于整数数组,但令人惊讶的是字符串数组却没有!它似乎只是排序数组的第二部分.我不知道是什么这段代码中有错!我将非常感谢您的帮助.

#include <iostream>
#include <list>
#include <string>
using namespace std;

void MergeSortA(int low,int high);
void MergeA(int low,int mid,int high);

string currentArray[5];
int main()
{
    for(int i = 0; i < 5; i++)
        cin >> currentArray[i];

    MergeSortA(0,4);

    for(int i = 0; i < 5; i++)
        cout << currentArray[i] <<endl;

    return 0;
}

void MergeSortA(int low,int high)
{
    int mid = 0;
    if(low < high)
    {
        mid = ((low+high)/2);
        MergeSortA(low,mid);
        MergeSortA(mid+1,high);
        MergeA(low,mid,high);
    }
}
void MergeA(int low,int high)
{
    int i = low,j = mid+1,k = low;
    string Temp[5];

    while(i <= mid && j <= high)
    {
        if( currentArray[i] < currentArray[j] )
        {
            Temp[k].assign(currentArray[i]);
            i++;
        }
        else
        {
            Temp[k].assign(currentArray[j]);
            j++;
        }
        k++;
    }
    if(i > mid )
    {
        for(int h = j ;h <= high ; h++ )
        {
            Temp[k].assign(currentArray[h]);
            k++;
        }
    }
    else
        for(int h = i; h<= mid ; h++ )
        {
            Temp[k].assign(currentArray[h]);
            k++;
        }
   for(int i = 0; i <= high ; i++)
   {
       currentArray[i].assign(Temp[i]);
   }
}

解决方法

从Temp数组中将值复制回currentArray时需要进行校正:

for(int i = low; i <= high ; i++) //copy from low to high
   {
       currentArray[i].assign(Temp[i]);
   }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读