Отказ от ответственности: я знаю, что параллельные массивы ужасны, и их следует избегать, и что сортировка выбором не самая эффективная сортировка, но в данном случае босс хочет, чтобы это было сделано именно так. Я просмотрел множество разных веб-сайтов, и ни один из них, похоже, не дает ответа. Кроме того, вероятно, следует указать, что я новичок в C++ и знаю только базовые принципы кодирования и отладки.
У меня есть два простых параллельных массива, и я пытаюсь разработать простую сортировку выбора, которая сортирует один из массивов, а затем соответственно меняет местами элементы во втором массиве. У меня работает часть сортировки выбора, но, похоже, она неправильно меняет местами элементы в моем втором массиве.
Вот как выглядит мой вывод:
1 (чушь)
2 (чушь)
3 (чушь)
4 (чушь)
5 (чушь)
Там, где я (тарабарщина), консоль не образует никакой узнаваемой буквы, просто странные формы (если это полезно, последний элемент, который выводится, - это сердце).
Вот как это должно быть выглядеть:
1 a
2 b
3 c
4 d
5 e
Теперь я понимаю, что я мог бы легко запустить сортировку выбором для второго массива в этом сценарии, но моя цель состоит в том, чтобы заставить второй массив менять местами элементы в соответствии с тем, что сортировка выбором делает с первым массивом.
Есть ли способ правильно выровнять эти массивы? Я пытался решить эту проблему в течение большей части дня, и я уверен, что это довольно просто понять, но мой мозг прострелен.
Ниже мой код, заранее спасибо за его просмотр.
#include "stdafx.h"
#include <iostream>
using namespace std;
//Function Prototypes
void sort(int num[], char alph[], int size);
//Selection sort function
void sort(int num[], char alph[], int size)
{
int startScan;
int minIndex;
int minValue;
for (startScan = 0; startScan < (size - 1); startScan++) //Moves through the elements
{
minIndex = startScan;
minValue = num[startScan];
int index = 0;
for (index = startScan + 1; index < size; index++) //Compares the elements
{
if (num[index] < minValue)
{
minValue = num[index];
minIndex = index;
}
}
num[minIndex] = num[startScan];
num[startScan] = minValue;
alph[minIndex] = alph[startScan];
alph[startScan] = alph[index];
}
}
//Main
int _tmain(int argc, _TCHAR* argv[])
{
int num[] = {5, 3, 1, 4, 2};
char alph[] = { 'e', 'c', 'a', 'd', 'b' };
int const SIZE = 5;
//Prints out unsorted array
cout << "This is the unsorted arrays." << endl;
cout << endl;
for (int count = 0; count < SIZE; count++)
{
cout << num[count] << " \t ";
cout << alph[count] << endl;
}
cout << endl;
cout << endl;
//Calls the sort function
sort(num, alph, SIZE);
//Prints out the sorted array
cout << "This is the sorted array." << endl;
cout << endl;
for (int count = 0; count < SIZE; count++)
{
cout << num[count] << " \t";
cout << alph[count] << endl;
}
//Pause
char temp[50];
cin >> temp;
return 0;
}
EDIT: я редактировал
alph[minIndex] = число[startScan]
issue, поэтому теперь он правильно читается как:
альфа[мининдекс] = альфа[начало сканирования]
Теперь я получаю это как вывод:
1 (чушь)
2 (чушь)
3 (чушь)
4 (чушь)
5 e
РЕДАКТИРОВАНИЕ 2: я отредактировал строку кода в предыдущем редактировании, и теперь массивы выстраиваются правильно, и я больше не получаю кучу тарабарщины для выходных данных. Ниже приведена отредактированная функция сортировки моего кода:
//NOTICE temp VARIABLE CHANGES!
void sort(int num[], char alph[], int size)
{
int startScan;
int minIndex;
int minValue;
int temp;
for (startScan = 0; startScan < (size - 1); startScan++) //Moves through the elements
{
minIndex = startScan;
minValue = num[startScan];
temp = alph[startScan];
int index = 0;
for (index = startScan + 1; index < size; index++) //Compares the elements
{
if (num[index] < minValue)
{
minValue = num[index];
minIndex = index;
temp = alph[index];
}
}
num[minIndex] = num[startScan];
num[startScan] = minValue;
alph[minIndex] = alph[startScan];
alph[startScan] = temp;
}
}