Я попытался сортировки с простого случаяMerge Сортировка не удается объединить части в конце процесса
test = {12, 11, 13, 5, 6};
Это делает spliting и слияние подразделов в lefthalf и righthalf как
{11 12} & {5 6 13}
который хочет. Но в Final Слияния он принимает lefthalf и righthalf, как
{12 11} & {13 5 6}
И это дает неправильный ответ:
{12 11 13 5 6}
Почему это происходит? Вот мой код.
void mergesrt(deque<int> mydeq){
if (mydeq.size() > 1){
int mid = mydeq.size()/2;
deque<int> lefthalf(mydeq.begin(), mydeq.begin() + mid);
deque<int> righthalf(mydeq.begin() + mid, mydeq.begin() + mydeq.size());
mergesrt(lefthalf);
mergesrt(righthalf);
int i = 0;
int j = 0;
int k = 0;
cout << "--------------merging-----------" << endl;
while (i < lefthalf.size() && j < righthalf.size()){
if (lefthalf[i] < righthalf[j]){
mydeq[k] = lefthalf[i];
k++;
i++;
}
else{
mydeq[k] = righthalf[j];
k++;
j++;
}
}
while (i < lefthalf.size()){
mydeq[k] = lefthalf[i];
k++;
i++;
}
while (j < lefthalf.size()){
mydeq[k] = righthalf[j];
k++;
j++;
}
}
return;
}
Похоже, вам, возможно, потребуется научиться использовать отладчик для перехода по вашему коду. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Я уверен, что он уже отлаживается обеспечить соответствующий промежуточный вход и выход @NathanOliver – prabodhprakash
Найдите небольшой пример сбоя. Попробуйте алгоритм вручную с ручкой и бумагой. Если на бумаге ошибка не возникает, сравните шаги с отладчиком и узнайте, где компьютер делает что-то другое в ручном и бумажном исполнении. – MrSmith42