Я написал простой пузырь алгоритм сортировки, однако он возвращает странные результаты, когда побежал ...Bubble рода не работает, как ожидалось C++
Я пытаюсь сортировать параллельные векторы (не уверен, что правильно терминологии, я Я принимаю понятие параллельных массивов и применяю его к векторам, чтобы я мог изменять размер во время выполнения), составляющие список контактов.
код, относящийся к векторам и пузырьковой сортировки:
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char** argv) {
vector <long long int> numbers;
vector <string> names;
names.push_back("jack");
numbers.push_back(6515551234);
names.push_back("jill");
numbers.push_back(6515554321);
names.push_back("bob");
numbers.push_back(6515557777);
names.push_back("aaron");
numbers.push_back(6665559999);
names.push_back("fred");
numbers.push_back(1115552222);
int index = -1;
long int temp = -1;
int pass = -1;
string tempName;
int sortChoice;
for (pass = 0; pass < names.size(); pass++) {
for (index = 0; index < names.size() - pass; index++) {
if (names[index] > names[index + 1]) {
temp = numbers[index];
numbers[index] = numbers[index + 1];
numbers[index + 1] = temp;
tempName = names[index];
names[index] = names[index + 1];
names[index + 1] = tempName;
}
}
}
for(int i = 0; i < numbers.size(); i++) {
cout << names[i] << ": " << numbers[i] << endl;
}
return 0;
}
И выход:
: 465675315720
aaron: 6665559999
bob: 6515557777
fred: 1115552222
jack: 6515551234
И это, кажется, что независимо от того, как я изменить векторы себя, последний из которых всегда отрезать и поставить в начале без имени и (по-видимому) случайного числа. Кто-нибудь видел это раньше?
Единственное, что я могу придумать, это то, что, пока сортировка обрабатывается, что-то портится в памяти, что приводит к неправильным местам памяти? ... И тот факт, что это всегда последний элемент, заставляет меня думать о проблеме относится к последней итерации цикла.
Кроме того, я сделал версию этого, чтобы сортировать по номерам, а не именам, и он отлично работает каждый раз. Это тот же код, но с использованием чисел [index] вместо имен [index] в цикле алгоритмов.
P.S. - Я по-прежнему довольно новичок в StackOverflow и кодировании в целом, поэтому, если я сделал какие-либо ошибки в форматировании этого сообщения, дайте мне знать, и я изменю их. И я надеюсь, что предоставил достаточно информации.
Спасибо заранее!
Похоже, вам, возможно, потребуется научиться использовать отладчик для перехода по вашему коду.С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Правильный инструмент для решения таких проблем - это ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –
это не пузырь сортировка ... –