Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Dennard
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
#1

Сортировка вектора по полю(Сортировка вставками) - C++

11.04.2017, 22:23. Просмотров 372. Ответов 12

Здравствуйте!
Нужно написать сортировку вектора по полю weight класса tomato.
Вот класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include <iostream>
#include <string>
using namespace std;
 
class tomato
{
    double weight;
    string name;
public:
    tomato() :weight(100), name("example") {}
    tomato(double iw, string in) {
        iw = weight;
        in = name;
    }
    void set(double num);
    void set(string var);
    double get();
    string get(string exm);
};
А вот сортировка:
C++
1
2
3
4
5
6
7
8
#include "Insert.h"
void insertsort::sort(vector<tomato> vect) {
    for (int i = 1; i < 114; i++)
    {
        for (int j = i; j > 0 && vect[j - 1].get() < vect[j].get(); j--) 
            swap(vect[j - 1], vect[j]);       
    }
}
Вот main:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
 
int main()
{
    vector<tomato> vect(114);
    for (int i = 0; i < 114; i++)
    {
        vect[i].set(200 + i);
        cout << vect[i].get() << endl;
    }
    cout << "Sorted;" << endl;
    i_sort(vect);     //функция вызывается из статической библиотеки 
    for (int i = 0; i < 114; i++)
    {
        cout << vect[i].get() << endl;
    }
    system("pause");
    return 0;
}
После сортировки вообще ничего не меняется. В чем проблема?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2017, 22:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка вектора по полю(Сортировка вставками) (C++):

Сортировка вектора объектов по полю
Всем доброго времени суток. Знаю, что вопрос часто задаваемый, но я не нашел...

Сортировка массива (вектора) структур по заданному полю
Нужно отсортировать массив по полю структуры. Все поля типа string. struct...

Сортировка массива(вектора)структур по одному полю
Код:#include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;vector&gt; #include...

Почему стандартная сортировка вектора std::sort намного быстрее сортировки вставками/пузырьком?
Здравствуйте, объясните, пожалуйста, как реализована std::sort. Ясно, что через...

Сортировка Шелла и сортировка вставками
Напишите программу для: 1)Сортировка вставкой 2)сортировка Шелла

Сортировка структуры по полю Tag и по полю Eng
Есть структура: struct _1C { string Tag; string Rus; string Eng;...

12
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
11.04.2017, 22:32 #2
Сравнение сделай отдельным условием внутри цикла.
0
Dennard
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
11.04.2017, 22:42  [ТС] #3
Не помогло:
C++
1
2
3
4
5
6
7
8
9
void insertsort::sort(vector<tomato> vect) {
    for (int i = 1; i < 114; i++)
    {
        for (int j = i; j > 0; j--)
        {
            if(vect[j - 1].get() < vect[j].get()) swap(vect[j - 1], vect[j]);
        }     
    }
}
0
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
11.04.2017, 22:47 #4
Какой это метод сортировки? Почему второй цикл в обратную сторону?
0
Dennard
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
11.04.2017, 23:05  [ТС] #5
Это сортировка вставками, второй цикл в обратную сторону чтобы сравнивать отсыортированные в прошлом шаге элементы.
0
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
11.04.2017, 23:06 #6
Здесь смотри, как должно быть: http://www.cyberforum.ru/cpp-beginners/thread27084.html#post4985
0
no swear
142 / 122 / 71
Регистрация: 01.07.2016
Сообщений: 709
Завершенные тесты: 1
11.04.2017, 23:09 #7
C++
1
2
3
4
5
6
7
void insertsort::sort(vector<tomato> vect) {
    for (int i = 1; i < 114; i++)
    {
        for (int j = i; j > 0 && vect[j - 1].get() < vect[j].get(); j--) 
            swap(vect[j - 1], vect[j]);       
    }
}
У вас не сортировка вставками а бред какой-то. Нет там никакого цикла идущего обратно по направлению
0
Dennard
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
11.04.2017, 23:18  [ТС] #8
Переписал как там, снова вывело тот же вектор в том же порядке.
C++
1
2
3
4
5
6
7
8
void insertsort::sort(vector<tomato> vect) {
    for (int i = 1, j; i < 114; ++i) // цикл проходов, i - номер прохода
    {
        for (j = i - 1; j >= 0 && vect[j].get() > vect[i].get(); --j) // поиск места элемента в готовой последовательности 
            vect[j + 1] = vect[j];    // сдвигаем элемент направо, пока не дошли
        vect[j + 1] = vect[i]; // место найдено, вставить элемент    
    }
}
0
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
11.04.2017, 23:21 #9
Цитата Сообщение от Dennard Посмотреть сообщение
Переписал как там
И где tmp?
0
Dennard
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
11.04.2017, 23:32  [ТС] #10
Разве он обязателен? Я вроде убрал его без ущерба сортировке...
Сейчас с ним попробую.

Добавлено через 7 минут
Вот с tmp. Результат тот же.
C++
1
2
3
4
5
6
7
8
9
10
void insertsort::sort(vector<tomato> vect) {
    tomato tmp;
    for (int i = 1, j; i < 114; ++i) // цикл проходов, i - номер прохода
    {
        tmp = vect[i];
        for (j = i - 1; j >= 0 && vect[j].get() <tmp.get(); --j) // поиск места элемента в готовой последовательности 
            vect[j + 1] = vect[j];    // сдвигаем элемент направо, пока не дошли
        vect[j + 1] = tmp; // место найдено, вставить элемент    
    }
}
0
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
12.04.2017, 00:19 #11
У тебя вектор изначально отсортирован, судя по тому циклу с set(). Ничего и не изменится.
0
Dennard
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
12.04.2017, 00:50  [ТС] #12
Я пробовал как по убыванию, так и по возрастанию.
Проблема решилась тем, что я передал в функцию не вектор, а ссылку на него.
0
nmcf
6246 / 5558 / 2528
Регистрация: 14.04.2014
Сообщений: 23,369
12.04.2017, 07:40 #13
Лучший ответ Сообщение было отмечено Dennard как решение

Решение

Цитата Сообщение от Dennard Посмотреть сообщение
а ссылку на него
Ну ясно, что ссылка нужна.
0
12.04.2017, 07:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2017, 07:40
Привет! Вот еще темы с решениями:

Сортировка вставками
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std;...

Сортировка вставками
Продемонстрируйте работу метода сортировки вставками по возрастанию. Для этого...

Сортировка вставками
Помогите написать программу на языке &quot;СИ&quot; Сортировка вставками. Дана...

Сортировка вставками
template&lt; class T &gt; void insertSort(T* a, int size) { T tmp; for...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru