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;
   }
}


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

Нужно ли мне просто изменить один из знаков, чтобы повернуть его вспять? Если да, то какой?

1 Ответов

Рейтинг:
2

CPallini

Цитата:
Нужно ли мне просто изменить один из знаков, чтобы повернуть его вспять?
Да, я так думаю.

Цитата:
Если да, то какой?
В вашем коде есть только одно, единственное, уникальное реальное сравнение... (циклические интераторы не считаются :-) ).


Следующий код
#include <iostream>
using namespace std;

void selectionSort(int numbers[], int numbersSize) {
   int indexGreatest = 0;
   int temp;  // Temporary variable for swap

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

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

         if ( numbers[j] > numbers[indexGreatest] ) {
            indexGreatest = j;
         }
      }

      // Swap numbers[i] and numbers[indexGreatest]
      temp = numbers[i];
      numbers[i] = numbers[indexGreatest];
      numbers[indexGreatest] = temp;
   }
}


int main()
{
  int a[] = {12,-23, 17,25,42, -1};
  const size_t Items = sizeof(a)/sizeof(a[0]);
  selectionSort(a, Items);
  for (size_t n=0; n < Items; ++n)
    cout << a[n] << " ";
  cout << endl;
}

Производит:
42 25 17 12 -1 -23