Мне дали задание для класса, и я пытаюсь это сделать, но я запутался в формулировке
Изменить алгоритм сортировки выбора для сортировки массива строк путем увеличения длины.
Теперь это из книги "Большой C ++ Late Objects Enhanced etext", 3-е издание, на практике упражнения 12.1.
Я запутался в части "сортировка массива струн за счет увеличения длины. " Я не знаю, что они имеют в виду под «увеличением длины». Я думал, что мне нужно изменить алгоритм так, чтобы мне нужно было создать переменную и сделать ее там, где вы консоль In (или cin >>), для этой переменной при запуске программ, но у меня возникло ощущение, что это не то, что я должен делать.
После просмотра некоторой информации о моей проблеме вместе с комментариями внизу (спасибо пользователю за это), я смог изменить программу так:
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
/**
Gets the position of the smallest element in an array range.
@param a the array
@param from the beginning of the range
@param to the end of the range
@return the position of the smallest element in
the range a[from]...a[to]
*/
int min_position(const char a[], int from, int to)
{
int min_pos = from;
for (int i = from + 1; i <= to; i++)
{
if (a[i] < a[min_pos]) { min_pos = i; }
}
return min_pos;
}
/**
Swaps two integers.
@param x the first integer to swap
@param y the second integer to swap
*/
void swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
/**
Sorts a array using the selection sort algorithm
@param a the array to sort
@param size the number of elements in a
*/
void selection_sort(const char a[], int size)
{
int next; // The next position to be set to the minimum
for (next = 0; next < size - 1; next++)
{
// Find the position of the minimum starting at next
int min_pos = min_position(a, next, size - 1);
// Swap the next element and the minimum
swap(a[next], a[min_pos]);
}
}
/**
Prints all elements in an array.
@param a the array to print
@param size the number of elements in a
*/
void print(const char a[], int size)
{
for (int i = 0; i < size; i++)
{
cout << a[i] << " ";
}
cout << endl;
}
int main()
{
srand(time(0));
const int SIZE = 6;
// changed value to Words
const char * Words[SIZE]={"School" , "To", "Sky" ,"Grade" , "A","Amazing"};
for(unsigned i = 0; i < SIZE; i++)
{
cout<<Words[rand()%SIZE]<<endl;
}
print(Words, SIZE);
selection_sort(Words, SIZE);
print(Words, SIZE);
return 0;
}
Я сделал это так, что слова в типе символов «Слова» будут выбираться случайным образом и будут продолжать это делать, сортируя самое короткое слово по длинному и распечатывая его. Обратите внимание, что в данный момент ведется работа.
Проблема для меня сейчас в том, что я не могу вызвать функции print
и selection_sort
, и я знаю, что это просто подсказка айсберга к тому, что нужно сделать. Я знаю, что могу использовать str.length
для сортировки слов, но теперь я хочу сосредоточиться на вызове функции, чтобы любой совет был полезен.