Форум программистов, компьютерный форум CyberForum.ru

Сортировка массива структур - C++

Восстановить пароль Регистрация
 
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
08.01.2013, 17:40     Сортировка массива структур #1
Привет всем ! как отсортировать массив структур ? а то почему не получается ...
вот код
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <stdio.h>
 
#define g_max 255
 
using namespace std;
 
struct INFO
{
    char name[g_max];
    char surname[g_max];
    char patronymic[g_max];
    char institute[g_max];
    int groups;
};
 
int main()
{
    FILE* file;
    INFO info, array[g_max];
    int value, n, count(0);
    char filename[g_max];
    cout<<"1. Записать файл"
        <<endl
        <<"2. Прочитать файл"<<endl;
    cin>>value;
    if(value == 1)
    {
        cout<<"Введите имя файла: ";
        cin>>filename;
        if((file = fopen(filename, "wb")) == NULL)
            perror("Не удается создать файл: ");
        cout<<"Количество студентов: ";
        cin>>n;
        for(int i = 0; i < n; i++)
        {
            cout<<"Имя: ";
            cin>>info.name;
            cout<<"Фамилия: ";
            cin>>info.surname;
            cout<<"Отчество: ";
            cin>>info.patronymic;
            cout<<"Институт: ";
            cin>>info.institute;
            cout<<"Номер группы: ";
            cin>>info.groups;
            fwrite(&info, sizeof(INFO), 1, file);
        }
        cout<<"Запишь успешно записан"<<endl;
        fclose(file);
    }
    else if(value == 2)
    {
        cout<<"Введите имя файла: ";
        cin>>filename;
        if((file = fopen(filename, "rb")) == NULL)
            perror("Не открывается файл: ");
        else while(fread(&info, sizeof(INFO), 1, file))
        {
            array[count++] = info;
            cout<<"Имя: "<<info.name
                <<endl
                <<"Фамилия: "<<info.surname
                <<endl
                <<"Отчество: "<<info.patronymic
                <<endl
                <<"ВУЗ: "<<info.institute
                <<endl
                <<"Номер группы: "<<info.groups<<endl<<endl;
        }
        fclose(file);
    }
    else cout<<"Error";
    INFO buf[g_max];
    for(int i = count - 1; i > 0; i--) //сортировка 
        for(int j = 0; j < i; j++)
            if(array[j].institute > array[j + 1].institute)
            {
                buf[i] = array[j];
                array[j] = array[j + 1];
                array[j + 1] = buf[i];
            }
    
    
    cout<<"Имя"<<endl;
    for(int i = 0; i < count; i++)
        cout<<array[i].name<<'\t';
    cout<<endl<<"Фамилия"<<endl;
    for(int i = 0; i < count; i++)
        cout<<array[i].surname<<'\t';
    cout<<endl<<"Отчество"<<endl;
    for(int i = 0; i < count; i++)
        cout<<array[i].patronymic<<'\t';
    cout<<endl<<"ВУЗ"<<endl;
    for(int i = 0; i < count; i++)
        cout<<array[i].institute<<'\t';
    cout<<endl<<"ГР"<<endl;
    for(int i = 0; i < count; i++)
        cout<<array[i].groups<<'\t';
    return 0;
}
Добавлено через 2 минуты
именно отсортировать отдельное поле ...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 17:40     Сортировка массива структур
Посмотрите здесь:

C++ Сортировка массива структур
C++ Сортировка массива структур...
Сортировка массива структур C++
C++ Сортировка массива структур
Сортировка массива структур C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.01.2013, 17:41     Сортировка массива структур #2
Цитата Сообщение от septe-mber Посмотреть сообщение
for(int i = count - 1; i > 0; i--) //сортировка
* * * * for(int j = 0; j < i; j++)
* * * * * * if(array[j].institute > array[j + 1].institute)
* * * * * * {
* * * * * * * * buf[i] = array[j];
* * * * * * * * array[j] = array[j + 1];
* * * * * * * * array[j + 1] = buf[i];
* * * * * * }
А почему с j+1? С i как то очевидней. И почему буфер имеет размер массива? Достаточно буфера в один элемент.
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
08.01.2013, 17:57  [ТС]     Сортировка массива структур #3
taras atavin, я хочу отдельное поле institute отсортировать , вот и задал такое буфер....
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.01.2013, 18:01     Сортировка массива структур #4
Назначение поля на ключ сортировки с буфером ни как не связано, раз по полю, то просто его надо сравнивать, а буфер в любом случае используется для временного хранения одного элемента, пока он не записан на место элемента, занявшего его место. Так зачем же раздувать буфер до фантастических размеров? Это же не бак на молокозаводе.
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
08.01.2013, 18:17  [ТС]     Сортировка массива структур #5
taras atavin, можешь прислать пример ? ) а то все никак не получается...
Yandex
Объявления
08.01.2013, 18:17     Сортировка массива структур
Ответ Создать тему
Опции темы

Текущее время: 16:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru