Модифицируйте алгоритм сортировки выбора, чтобы отсортировать массив строк за счет увеличения длины - PullRequest
0 голосов
/ 04 апреля 2020

Мне дали задание для класса, и я пытаюсь это сделать, но я запутался в формулировке

Изменить алгоритм сортировки выбора для сортировки массива строк путем увеличения длины.

Теперь это из книги "Большой 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 для сортировки слов, но теперь я хочу сосредоточиться на вызове функции, чтобы любой совет был полезен.

1 Ответ

0 голосов
/ 04 апреля 2020

Они, вероятно, означают длину символов в строке. Если вы используете метод size () или length () для строк, он возвращает количество символов в строке.

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

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