Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
1

Отсортировать в алфавитном порядке данные методом вставки

09.03.2017, 18:01. Показов 6138. Ответов 14

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите каким образом происходит сортировка в алфавитном порядке?

Например дан input.txt
Код
111 
Сидоров Олег Геннадьевич 1998 4 3 4 5 3
Петрова Мария Алексеевна 1999 5 5 5 3 5
Кузнецов Игорь Иванович 1998 4 4 4 5 4
Суздаль Степан Владимирович 1997 5 4 4 5 3
Он должен быть отсортирован в алфавитном порядке по фамилии методом вставки.

Тогда output.txt
Код
111
Кузнецов Игорь Иванович 1998 4 4 4 5 4
Петрова Мария Алексеевна 1999 5 5 5 3 5
Сидоров Олег Геннадьевич 1998 4 3 4 5 3
Суздаль Степан Владимирович 1997 5 4 4 5 3
Добавлено через 7 минут
p.s. Пример записи кода при помощи сортировки вставками
C++
1
2
3
4
5
6
7
8
9
10
11
void sort(nameStruct *a, int n){
    nameStruct temp;
    for (int i=2; i<=n; i++){
        int j = i;
        while (a[j].key<a[j-1].key){
                temp=a[j];
            a[j]=a[j-1];
            a[j-1]=temp;
            j--;}
    }
}
Добавлено через 33 минуты
p.s.s. Нашёл такую информацию, что если сортировать по фамилиям, то можно взять пустое поле после fam...
Код
a[0].fam=" ";
Как это можно представить в программе?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2017, 18:01
Ответы с готовыми решениями:

Отсортировать данные по фамилиям студентов в алфавитном порядке
С текстового файла считать последовательность записей, содержащих данные о результатах сессии...

Отсортировать в алфавитном порядке данные в StringGrid
Добрый день! Помогите пожалуйста отсортировать в алфавитном порядке данные StrinGrid, нашла...

Отсортировать массив целых чисел методом вставки в порядке возрастания
Дан массив целых чисел А . Отсортировать их методом вставки в порядке возрастания (оформить в виде...

Отсортировать массив латинских букв методом вставки в порядке убывания
Ребята вот задача, Дан массив латинских букв А . Отсортировать их методом вставки в порядке...

14
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
09.03.2017, 18:07 2
А что не получается? Если key - ФИО в string, то должно работать.
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.03.2017, 18:16  [ТС] 3
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "fstream"
#include "string"
#include "iostream"
#include "iomanip"
 
using namespace std;
 
ifstream in("input.txt");
ofstream out("output.txt");
 
struct student{
    string F, I, O;
    int year, ot1, ot2, ot3, ot4, ot5;
    void print();
};
 
void student::print(){
    out << F << '\t' << I << '\t' << O << '\t' << year << '\t' << ot1 << '\t' << ot2 << '\t' << ot3 << '\t' << ot4 << '\t' << ot5 << endl;
}
 
void sort(student *a, int n){
    student temp;
    for (int i = 1; i <= n; i++){
        int j = i;
        while (a[j - 1].F.compare(a[j].F)>0){
            temp = a[j];
            a[j] = a[j - 1];
            a[j - 1] = temp;
            j--;
        }
    }
}
 
int main(){
    int n = 0;
    student a[20];
    while (in.peek() != EOF){
        in >> a[n].F >> a[n].I >> a[n].O >> a[n].year >> a[n].ot1 >> a[n].ot2 >> a[n].ot3 >> a[n].ot4 >> a[n].ot5;
        n++;
    }
    sort(a, n);
    for (int i = 0; i < n; i++){
        a[i].print();
    }
    in.close();
    out.close();
    return 0;
}
Не работает...
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
09.03.2017, 18:46 4
C++
1
2
3
for (int i = 1; i < n; i++)
//...
while (a[j].F < a[j - 1].F)
Так должно сортировать по фамилии, если алгоритм правильный.
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.03.2017, 18:49  [ТС] 5
Видимо неправильный алгоритм, т.к. выводит:
Код
111	Сидоров	Олег	-858993460	-858993460	-858993460	-858993460	-858993460	-858993460
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
09.03.2017, 18:58 6
Скорректировал по моему примеру? Условие на строгое заменил?
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.03.2017, 19:04  [ТС] 7
Да.
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
09.03.2017, 19:10 8
C++
1
2
3
4
5
6
7
8
9
10
11
void sort(student *a, int n) 
{
    student tmp;
    for (int i = 1, j; i < size; ++i)
    {
        tmp = a[i]; 
        for (j = i - 1; j >= 0 && a[j].F > tmp.F; --j)
            a[j + 1] = a[j];
        a[j + 1] = tmp;
    }
}
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.03.2017, 19:11  [ТС] 9
Цитата Сообщение от nmcf Посмотреть сообщение
i < size
А size чего? Поля?
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
09.03.2017, 19:16 10
Замени на n.
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.03.2017, 19:23  [ТС] 11
При том если я убираю в начале 1-ую строку с номер группы, то компилируется и выводит вот это в output:
Код
			-858993460	-858993460	-858993460	-858993460	-858993460	-858993460
Кузнецов	Игорь	Иванович	1998	4	4	4	5	4
Петрова	Мария	Алексеевна	1999	5	5	5	3	5
Сидоров	Олег	Геннадьевич	1998	4	3	4	5	3
Суздаль	Степан	Владимирович	1997	5	4	4	5	3
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
09.03.2017, 20:16 12
Какую первую строку? Если сделать вывод до сортировки, нормально отображается?
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.03.2017, 20:20  [ТС] 13
Цитата Сообщение от vladrrom Посмотреть сообщение
111
Сидоров Олег Геннадьевич 1998 4 3 4 5 3
Петрова Мария Алексеевна 1999 5 5 5 3 5
Кузнецов Игорь Иванович 1998 4 4 4 5 4
Суздаль Степан Владимирович 1997 5 4 4 5 3
Отсюда первая строка (номер группы)

Если убрать сортировку, то тоже не нормально отображается.
Миниатюры
Отсортировать в алфавитном порядке данные методом вставки  
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,682
09.03.2017, 20:34 14
Какой ещё номер группы? Убери его оттуда.
0
4 / 4 / 5
Регистрация: 13.10.2016
Сообщений: 116
09.03.2017, 20:36  [ТС] 15
Он по заданию необходим. Можно ведь флаг на вторую строчку поставить и с него начинать?

Добавлено через 42 секунды
Я разобрался откуда были цифры. В конце input были пробелы. Теперь выводится всё прилично.
0
09.03.2017, 20:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2017, 20:36
Помогаю со студенческими работами здесь

Отсортировать одномерный массив a[1..N], состоящий из символов в порядке возрастания методом «вставки»
Ребята помогите написать программу для паскаля. Разработать алгоритм и программу решения задачи,...

Отсортировать символьный массив методом вставки в порядке убывания. Вычислить сумму кодов нечетных элементов
Дан массив латинских букв А . Отсортировать их методом вставки в порядке убывания. Вычислить сумму...

Массивы: отсортировать в алфавитном порядке по всему массиву и в алфавитном порядке по строкам
Ввести с клавиатуры массив произвольного размера состоящий из латинских букв отсортировать:а)в...

Переписать данные файла input.txt в файл output.txt, отсортировать их в алфавитном порядке по фамилии
Народ меня тут 11 задач мне нужно их подробно прокомментировать какая строчка что делает(пример...


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

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