0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
1

Делает лишнюю перестановку в конце

07.05.2020, 10:03. Показов 943. Ответов 6
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Имеется следующая функция перестановки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void NameOfSellersInDescendingOrderOfProductivity(vector <seller>& DataSel)
{
    seller DataSel1;
    vector<seller> DataSel_sort = DataSel;//структурa данных
    int min = 0; // запомним номер текущей ячейки, как ячейки с минимальным значением
    for (int i = 0; i < size(DataSel_sort); i++)
    {
        
        // в цикле найдем  номер ячейки с минимальным значением
        for (int j = i + 1; j < size(DataSel_sort); j++)
        {
            min = (DataSel_sort[j].average_time <= DataSel_sort[min].average_time) ? min : j;
 
        }
        // cделаем перестановку этого элемента, поменяв его местами с текущим
        if (i != min)
        {
            seller tmp_seller = DataSel_sort[i];
            DataSel_sort[i] = DataSel_sort[min];
            DataSel_sort[min] = tmp_seller;
        }
        
    }
    for (int i = 0; i < size(DataSel); i++)
    {
        //Вывод отсортированного массива
        cout << DataSel_sort[i].FIO << '\t';
        cout << endl;
    }
}
Работает вроде правильно, но в конце делает лишнюю перестановку. Не могу понять почему. Буду благодарен за помощь..
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2020, 10:03
Ответы с готовыми решениями:

const в конце объявления метода делает только *this константным?
То есть const в методе int foo(int x, int y) const; говорит, что внутри метода не будут...

Printhepl ключом -h выдает что делает программа, но в конце пишет segmentation fault(core damped)
Помогите выявить ошибку, компилю в линуксе, когда вызывают Printhepl ключом -h он выдает что делает...

Этот скрипт работает на конце странице. Как сделать чтобы работал на конце DIVа?
&lt;script&gt; $(document).ready(function(){ $(window).scroll(function(){ var position =...

МФУ выпускает лишнюю страницу
всем привет. проблема в следующем. при печати с 2-х компов в конце выходит лишняя пустая...

6
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
07.05.2020, 10:21 2
Цитата Сообщение от Ilya44 Посмотреть сообщение
C++
1
for (int i = 0; i < size(DataSel_sort); i++)
C++
1
i < (size(DataSel_sort) - 1)
Цитата Сообщение от Ilya44 Посмотреть сообщение
C++
1
min = (DataSel_sort[j].average_time <= DataSel_sort[min].average_time)
C++
1
DataSel_sort[j].average_time < DataSel_sort[min].average_time
так попробуй
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
07.05.2020, 10:25  [ТС] 3
К сожалению не помогло, а в этом месте
C++
1
min = (DataSel_sort[j].average_time < DataSel_sort[min].average_time)
, мой косяк был там должно быть без =.
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
07.05.2020, 10:44 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void NameOfSellersInDescendingOrderOfProductivity(vector<seller>& DataSel)
{
    seller DataSel1;
    vector<seller> DataSel_sort = DataSel;//структурa данных
    int min = 0; // запомним номер текущей ячейки, как ячейки с минимальным значением
    for (int i = 0; i < size(DataSel_sort) - 1; i++) ////////////
    {
 
        // в цикле найдем  номер ячейки с минимальным значением
        for (int j = i + 1; j < size(DataSel_sort); j++)
        {
            min = (DataSel_sort[j].average_time < DataSel_sort[min].average_time) ? j : min; ///////
 
        }
        // cделаем перестановку этого элемента, поменяв его местами с текущим
//      if (i != min) ////////////////
        {
            seller tmp_seller = DataSel_sort[i];
            DataSel_sort[i] = DataSel_sort[min];
            DataSel_sort[min] = tmp_seller;
        }
 
        min = i+1; ///////////////////
 
    }
    for (int i = 0; i < size(DataSel); i++)
    {
        //Вывод отсортированного массива
        cout << DataSel_sort[i].FIO << '\t';
        cout << endl;
    }
}
0
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
07.05.2020, 10:51  [ТС] 5
Спасибо. Стало работать верно. Получается было лишнее условие
C++
1
if (i != min)
и надо было добавить
C++
1
 min = i+1;
Если я все верно понял?
0
1709 / 1109 / 337
Регистрация: 25.01.2019
Сообщений: 2,910
07.05.2020, 10:55 6
Лучший ответ Сообщение было отмечено Ilya44 как решение

Решение

Цитата Сообщение от Ilya44 Посмотреть сообщение
было лишнее условие
да не лишнее, можно оставить.

Цитата Сообщение от Ilya44 Посмотреть сообщение
min = (DataSel_sort[j].average_time <= DataSel_sort[min].average_time) ? min : j;
Цитата Сообщение от Folian Посмотреть сообщение
min = (DataSel_sort[j].average_time < DataSel_sort[min].average_time) ? j : min; ///////
Цитата Сообщение от Folian Посмотреть сообщение
i < size(DataSel_sort) - 1
1
0 / 0 / 0
Регистрация: 19.03.2020
Сообщений: 129
07.05.2020, 10:59  [ТС] 7
Можете помочь еще с бинарной вставкой, если создам отдельную тему?)
0
07.05.2020, 10:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2020, 10:59
Помогаю со студенческими работами здесь

Убрать лишнюю иконку из трея
После неудачной установки apache 2.4 осталась его иконка в трее. Как ее убрать? Нужно убрать...

Удалить лишнюю информацию из строки
имеется допустим запись &quot;Плательщик: Иванов Иван Иванович&quot;, как с помощью SubString мне можно будет...

Курсовая: найти лишнюю картинку
суть курсовой, даны картинки. нужно найти лишнее это для детей 4 классов. курсовая будет...

eof() Добавляет лишнюю строку
Всем привет, помогите пожалуйста. eof() добавляет лишнюю строку, как решить проблему или заменить....

Программа выводит лишнюю информацию
Выводит лишнюю информацию,программа проходит и в конце выдает результат и лишнее,не пойму в чем...

Как убрать лишнюю надпись?
Как убрать с блога ненужную надпись &quot; 1346672532


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru