CJGlandor Ответов: 1

Как мне взять selectionsort и изменить его так, чтобы он включал шаблон?


#include <iostream>
using namespace std;

void selectionSort(int numbers[], int numbersSize) {
   int indexSmallest = 0;
   int temp;  // Temporary variable for swap
   
   for (int i = 0; i < numbersSize - 1; ++i) {
      
      // Find index of smallest remaining element
      indexSmallest = i;
      for (int j = i + 1; j < numbersSize; ++j) {
         
         if ( numbers[j] < numbers[indexSmallest] ) {
            indexSmallest = j;
         }
      }
      
      // Swap numbers[i] and numbers[indexSmallest]
      temp = numbers[i];
      numbers[i] = numbers[indexSmallest];
      numbers[indexSmallest] = temp;
   }
}


Что я уже пробовал:

Я знаю, что мы используем этот тип, но я не уверен, где его поставить

Richard MacCutchan

Вы заменяете "int" на тип. Но вам также нужно будет изменить ваши компараторы, чтобы учесть различные типы.

1 Ответов

Рейтинг:
0

CPallini

Таким образом:

#include <iostream>
using namespace std;

template <typename T> void selectionSort(T numbers[], int numbersSize) {
  int indexSmallest = 0;

  for (int i = 0; i < numbersSize - 1; ++i) {

    // Find index of smallest remaining element
    indexSmallest = i;
    for (int j = i + 1; j < numbersSize; ++j) {

      if ( numbers[j] < numbers[indexSmallest] ) {
        indexSmallest = j;
    }
  }
  // Swap numbers[i] and numbers[indexSmallest]
  swap( numbers[i], numbers[indexSmallest]);
  }
}


Тест:
int main()
{
  int i[] = {12,-23, 17,25,42, -1};
  const size_t iItems = sizeof(i)/sizeof(i[0]);

  selectionSort(i, iItems);
  for (size_t n=0; n < iItems; ++n)
    cout << i[n] << " ";
  cout << endl;

  double d[] = {27.0, 35.3, -.0001, 15E7 };
  const size_t dItems = sizeof(d)/sizeof(d[0]);
  selectionSort(d, dItems);
  for (size_t n=0; n < dItems; ++n)
    cout << d[n] << " ";
  cout << endl;
}


Выход:
-23 -1 12 17 25 42 
-0.0001 27 35 1.5e+08


Richard MacCutchan

То temp переменная должна быть T тип.

CPallini

Вы абсолютно правы. Теперь Исправлено. Спасибо.

Richard MacCutchan

Так что теперь он получает вполне заслуженную пятерку.

CPallini

Еще раз спасибо, Ричард.
От - надеюсь, что вы в безопасности и все хорошо.

Richard MacCutchan

Да, спасибо Карло, только я и моя жена в нашем доме, так легко управлять нашей изоляцией. Молюсь, чтобы все дети, внуки и правнуки справились.

Я верю, что вы и ваша семья в порядке; новости из Италии в эти дни звучат не очень позитивно.