Top.Mail.Ru
Уведомления
Очистить все

Сортировка std::vector от бОльшего к меньшему без использования sort()?

 cvet
(@cvet)
Level 1

Привет, подскажите идею как оптимально реализовать сортировку элементов std::vector<int> без использования std::sort()? С std::sort() все понятно и работает, вопрос именно в том, чтобы сделать без нее.

Заранее всем спасибо.

Цитата
Создатель темы Размещено : 05.03.2025 21:51
TQFP
 TQFP
(@tqfp)
Level 5

Сортировка пузырьком )

https://education.yandex.ru/journal/osnovnye-vidy-sortirovok-i-primery-ikh-realizatsii

ОтветитьЦитата
Размещено : 06.03.2025 11:46
 cvet
(@cvet)
Level 1

@tqfp спасибо, буду пробовать!

ОтветитьЦитата
Создатель темы Размещено : 06.03.2025 12:08
 cvet
(@cvet)
Level 1

Что-то не получается никак... Пример взял по ссылке:

void BubbleSort(vector<int>& values) {
  for (size_t idx_i = 0; idx_i + 1 < values.size(); ++idx_i) {
    for (size_t idx_j = 0; idx_j + 1 < values.size() - idx_i; ++idx_j) {
      if (values[idx_j + 1] < values[idx_j]) {
        swap(values[idx_j], values[idx_j + 1]);
      }
    }
  }
}
ОтветитьЦитата
Создатель темы Размещено : 06.03.2025 12:59
 cvet
(@cvet)
Level 1

Ошибся при добавлении в свой проект 😔 все работает

ОтветитьЦитата
Создатель темы Размещено : 06.03.2025 13:21
TQFP
 TQFP
(@tqfp)
Level 5

Вот еще вариант:

void bubbleSort(vector<int>& arr) {
    int n = arr.size();
    bool swapped;
  
    for (int i = 0; i < n - 1; i++) {
        swapped = false;
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr[j], arr[j + 1]);
                swapped = true;
            }
        }
      
        if (!swapped)
            break;
    }
}

Взято отсюда.

ОтветитьЦитата
Размещено : 06.03.2025 17:25
TQFP
 TQFP
(@tqfp)
Level 5

Если от большего к меньшему, то меняем:

if (arr[j] > arr[j + 1])

на:

if (arr[j] < arr[j + 1])
ОтветитьЦитата
Размещено : 06.03.2025 17:28
Поделиться: