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

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

11.04.2017, 22:23. Показов 3797. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2017, 22:23
Ответы с готовыми решениями:

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

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

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

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

12
7638 / 6446 / 2940
Регистрация: 14.04.2014
Сообщений: 28,103
11.04.2017, 22:32 2
Сравнение сделай отдельным условием внутри цикла.
0
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
7638 / 6446 / 2940
Регистрация: 14.04.2014
Сообщений: 28,103
11.04.2017, 22:47 4
Какой это метод сортировки? Почему второй цикл в обратную сторону?
0
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
11.04.2017, 23:05  [ТС] 5
Это сортировка вставками, второй цикл в обратную сторону чтобы сравнивать отсыортированные в прошлом шаге элементы.
0
7638 / 6446 / 2940
Регистрация: 14.04.2014
Сообщений: 28,103
11.04.2017, 23:06 6
Здесь смотри, как должно быть: Алгоритмы сортировок
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
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
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
7638 / 6446 / 2940
Регистрация: 14.04.2014
Сообщений: 28,103
11.04.2017, 23:21 9
Цитата Сообщение от Dennard Посмотреть сообщение
Переписал как там
И где tmp?
0
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
7638 / 6446 / 2940
Регистрация: 14.04.2014
Сообщений: 28,103
12.04.2017, 00:19 11
У тебя вектор изначально отсортирован, судя по тому циклу с set(). Ничего и не изменится.
0
0 / 0 / 0
Регистрация: 18.11.2016
Сообщений: 9
12.04.2017, 00:50  [ТС] 12
Я пробовал как по убыванию, так и по возрастанию.
Проблема решилась тем, что я передал в функцию не вектор, а ссылку на него.
0
7638 / 6446 / 2940
Регистрация: 14.04.2014
Сообщений: 28,103
12.04.2017, 07:40 13
Лучший ответ Сообщение было отмечено Dennard как решение

Решение

Цитата Сообщение от Dennard Посмотреть сообщение
а ссылку на него
Ну ясно, что ссылка нужна.
0
12.04.2017, 07:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2017, 07:40
Помогаю со студенческими работами здесь

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

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

сортировка вставками
Начал изучать Кормена. Написал первый алгоритм. Не сортируется первый элемент массива. Код написан...

Сортировка вставками
Необходимо отсортировать весь массив методом вставками парных чисел на возрастание const int N =...


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

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

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