Отладка сортировки слиянием

0
void CensusData::mergeSort(int type) {
    if(type == 0)
        MERGE_SORT(type, 0, data.size());
}

void CensusData::MERGE_SORT(int type, int p, int r){
    //int q;
    //cout << "data size " << data.size() << endl;
    std::cout << "MERGE_SORT START ///("<< p << ", " << r << ")" <<std::endl;
    if(p < r)
    {
        int q = (p + r)/2;
        MERGE_SORT(type, p, q);
        MERGE_SORT(type, q + 1, r);
        MERGE(type, p, q ,r);
    }
}

void CensusData::MERGE(int type, int p, int q, int r){
    if(type == 0)
    {
        std::cout << "MERGING" << std::endl;
        //int n1;
        //int n2;
        int n1 = q - p + 1;
        int n2 = r - q;
        int L[n1 + 1];
        int R[n2 + 1];
        for(int i = 1; i < n1; i++)
        {
            cout << "filling Left Array" << endl;
            L[i] = data[p + i - 1]->population;
        }
        for(int j = 1; j < n2; j++)
        {
            cout << "filling Right Array" << endl;
            R[j] = data[q + j]->population;
        }
        int i = 1;
        int j = 1;
        for(int k = p; p < r; p++)
        {
            cout << "for loop: " << endl;
            if(L[i] <= R[j])
            {
                cout << "TRUE" << endl;
                data[k]->population = L[j];
                i = i + 1;
            }
            /*else if(data[k]->population == R[j])
            {
                cout << "FALSE" << endl;
                j = j + 1;
            }*/
            else
            {
                data[k]->population = R[j];
                j = j + 1;
            }
        }

    }
}

не беспокойтесь о типе, он вообще не будет использовать эту программу. в основном я пытаюсь сделать сортировку слияния, которая примет вектор, содержащий целое число, вектор выглядит следующим образом:

   class Record {                         // declaration of a Record
   public:
      std::string* city;
      std::string* state;
      int population;
      Record(std::string&, std::string&, int);
      ~Record();
   };
   std::vector<Record*> data;   

в основном я пытался получить его на самом деле сортировать, но он, похоже, не работает вообще, я даже видел мусор в программе.

пример ввода: 237 812826 68642 вывод: 4484540 812826 68642

Примечание: вся остальная часть программы работает нормально (протестирована с сортировкой вставки) только эта часть не работает.

Теги:
vector
mergesort

1 ответ

0

Взгляните на лекцию 15 отличного курса Стэнфордских университетов "Программирование абстракций". Он охватывает все виды, включая слияние:

http://see.stanford.edu/see/lecturelist.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e

Вы даже можете получить исходный код от SourceForge:

http://sourceforge.net/projects/progabstrlib/files/

Ещё вопросы

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