Слияние сортировки по структурам не работает

0

Я выполняю сортировку слияния в структуре. Сорт выполняется в городах-адресатах, которые представляют собой массив. Когда я пробовал его с помощью простых массивов, он работал. Он не работает для структур, хотя :(

#include <fstream>   // for std::ifstream
#include <sstream>   // for std::istringstream
#include <cstring>    // for std::string and std::getline
#include <iostream>
#include <ctype.h>
#include <stdio.h>
#include<algorithm>
#include <string.h>

using namespace std;

#define MAX 30
#define WORD 3


typedef struct node{
int nodeId;
char destCity[MAX];
char arrCity[MAX];
int time;
}NODE;

typedef struct edge{
 int adjoin;
int distance;
}EDGE;

typedef struct graph{
NODE cityNode[MAX];
EDGE e[MAX][MAX];
}GRAPH;

GRAPH graph,graphCpy,Temp;
GRAPH currentArray;


void MergeA(int low ,int mid , int high)
{
int i = low, j = mid+1 , k = low;

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

    strcpy(Temp.cityNode[k].destCity,currentArray.cityNode[h].destCity);
        k++;

    }
}
else
    for(int h = i; h<= mid ; h++ )
    {

strcpy(Temp.cityNode[k].destCity,currentArray.cityNode[h].destCity);

    k++;

    }
 for(int i = low; i <= high ; i++){

    strcpy(currentArray.cityNode[i].destCity,Temp.cityNode[i].destCity);
}


}
void MergeSortA(int low , int high)
{

int mid = 0;
if(low < high)
{
    mid = low + (high-low)/2;
cout<<"beforemerge"<<endl;
    MergeSortA(low , mid);
    MergeSortA(mid+1,high);
    MergeA(low,mid,high);

}
}
int main(){
std::ifstream infile("theWords.txt");
    std::string line;
while (std::getline(infile,(line)) && count<30){
    std::istringstream iss(line);
            if ((iss) >>graph.cityNode[count].destCity >> graph.cityNode[count].arrCity  >> graph.cityNode[count].time){
graph.cityNode[count].nodeId = count ;
count++;
}
graphCpy= graph;
currentArray= graphCpy;
MergeSortA(0,count);
for(int i = 0; i <= count ; i++){
    cout << currentArray.cityNode[i].destCity <<endl;

    }
}

Я ввожу значения в копию графа, которая затем присваивается currentArray !!

Теги:
struct
mergesort

1 ответ

1

Кажется, у вас a < b впечатление, что вы можете разумно сравнить массивы символов с a < b. Это не относится к делу. Вам нужно будет взглянуть на strcmp() или, предпочтительнее, сначала использовать std::string. Лично я также настоятельно рекомендую сделать алгоритмы сортировки слияния полностью независимыми от какой-либо конкретной структуры и убедиться, что я могу разумно поменять свои узлы.

  • 0
    Я попробовал это с strcmp. Это дает мне тот же несортированный вход как выход :(
  • 0
    Тем не менее, отказавшись от использования strcmp вы только создаете дополнительную проблему для себя. Программирование угадыванием не работает.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню