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

Блочная сортировка структур (Отсортировать массив структур по фамилии) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
03.03.2014, 21:53     Блочная сортировка структур (Отсортировать массив структур по фамилии) #1
Подскажите алгоритм блочной сортировки структур на языке С++.
Мне нужно отсортировать массив структур по фамилии.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 21:53     Блочная сортировка структур (Отсортировать массив структур по фамилии)
Посмотрите здесь:

[C++] Отсортировать и вывести на экран массив структур C++
Массив структур, сохранение начала каждой из структур C++
Нужно отсортировать массив структур по убыванию поля date C++
C++ Отсортировать массив структур по возрастанию
C++ Отсортировать массив из структур по одному из полей структуры любым способом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.03.2014, 23:07     Блочная сортировка структур (Отсортировать массив структур по фамилии) #2
Алгоритмы сортировок
Выбираете, сортируете. Для строк есть функции сравнения.
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
03.03.2014, 23:20  [ТС]     Блочная сортировка структур (Отсортировать массив структур по фамилии) #3
Я не совсем понимаю, как это реализовать в коде.
Например, есть в структуре имя , фамилия и отчество. Мне нужно отсортировать массив структур по фамилиям. То есть в массиве структур первым элементом должна стать структура с фамилией, которая идет раньше по алфавиту.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.03.2014, 23:47     Блочная сортировка структур (Отсортировать массив структур по фамилии) #4
Цитата Сообщение от aimbat Посмотреть сообщение
Я не совсем понимаю, как это реализовать в коде.
Может так понятней будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct A
{
    char name[20];
    int x;
    int y;
};
 
A arr[3];
   ...
   // тут сортировка по name
for (int i = 0; i < 3; ++i)
{
   ...
    if (strcmp(arr[i].name, arr[i + 1].name) > 0)
   ...
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
04.03.2014, 00:37  [ТС]     Блочная сортировка структур (Отсортировать массив структур по фамилии) #5
Как это реализовать в этом коде?Нужно отсортировать по фамилии.
Заранее спасибо.
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
#include <iostream>
#include <conio.h>
#include <string.h>
 
using namespace std;
 
struct student
{
    char name[25];
       char sername[25];
    char otchestvo[25];
    char adres[15];
    float bal1;
    float bal2;
    float bal3;
 
};
 
void vvod(student*mass,int k)
{
    for(int i=0;i<k;i++)
    {
        cout<<"Name: ";
        cin>>mass[i].name;
        cout<<"Sername: ";
        cin>>mass[i].sername;
        cout<<"Otchestvo: ";
        cin>>mass[i].otchestvo;
        cout<<"Adres: ";
        cin>>mass[i].adres;
        cout<<"Bal1: ";
        cin>>mass[i].bal1;
        cout<<"Bal2: ";
        cin>>mass[i].bal2;
        cout<<"Bal3: ";
        cin>>mass[i].bal3;
    }
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
void sort(student*mass,int k)
{
    float masbal[30];
    for(int i=0;i<k;i++)
        masbal[i]=(mass[i].bal1+mass[i].bal2+mass[i].bal3)/3;
       cout<<"Result: "<<endl<<endl;
    for(int p=0;p<k;p++)
        if(stricmp(mass[p].adres,"Kiev")==0)
                if(masbal[p]>=4.5)
                  {
                cout<<mass[p].sername<<" ";
                cout<<mass[p].name<<" ";
                      cout<<mass[p].otchestvo<<", ";
                      cout<<mass[p].adres<<", ";
                cout<<masbal[p]<<endl<<endl;
                  }
}
 
void main()
{
    int k;
    cout<<"Vvedite kolichestvo studentov: ";
    cin>>k;
    student*mass=new student[k];
    vvod(mass,k);
    sort(mass,k);
    getch();
}
Keyw
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 36
04.03.2014, 01:20     Блочная сортировка структур (Отсортировать массив структур по фамилии) #6
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
struct spis
{
    char p[15];
};
 
 
spis *s;
 
void sort()
{
    spis tmp;
    int i, j;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
        {
            if(s[j].p[0]>s[j+1].p[0])
            {
                strcpy(tmp.p, s[j].p);
                strcpy(s[j].p, s[j+1].p);
                strcpy(s[j+1].p, tmp.p);
            }
                else
                    if(s[j].p[0]==s[j+1].p[0])
                        srt(j, 1);
                    
        }
}
 
void srt(int j, int b)
{
    spis tmp;
    if(s[j].p[b]>s[j+1].p[b])
    {
        strcpy(tmp.p, s[j].p);
        strcpy(s[j].p, s[j+1].p);
        strcpy(s[j+1].p, tmp.p);
    }
        else
            if(s[j].p[b]==s[j+1].p[b])
                srt(j, b+1);
}
Это метод сортировки, можешь попробовать реализировать в своей программе.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,723
Записей в блоге: 3
04.03.2014, 02:45     Блочная сортировка структур (Отсортировать массив структур по фамилии) #7
alsav22, мне кажется хитринка в вопросе состоит в том, что при равенстве фамилий нужно сравнить имена и при их равенстве, - отчества. Рекурсивно можно. (если встретится полное совпадение, - счетчиком защититься, то есть на 4-м вызове выходить )
А может, просто кажется.
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
04.03.2014, 03:10  [ТС]     Блочная сортировка структур (Отсортировать массив структур по фамилии) #8
IGPIGP, можно, но сейчас мне это не нужно.
Сейчас я хочу сортировать массив структур. Не просто фамилии, а соответствующие имя, отчество, баллы, адрес вместе с фамилией . То есть сортировать блоки памяти.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,723
Записей в блоге: 3
04.03.2014, 03:26     Блочная сортировка структур (Отсортировать массив структур по фамилии) #9
aimbat, для сортировки нужно определиться с критерием сравнения и тогда определить алгоритм. Понятно, что сортировать вам нужно структуры. Главное понять как их сравнивать. В вашем случае сравнение строк без учёта регистра вполне подходит. Но представьте, что у Вас встретятся
Иванов A.A и Иванов Ъ. Ъ. (при сортировке только по фамилии второй может оказаться впереди)
Набор позволяет набрать Ъ в верхнем регистре. Слов начинающихся на ъ я не встречал, а вот с именами нельзя делать никаких предположений. Впрочем, говорю же:
Цитата Сообщение от IGPIGP Посмотреть сообщение
А может, просто кажется
alsav22
04.03.2014, 04:17
  #10

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
мне кажется хитринка в вопросе состоит в том, что при равенстве фамилий нужно сравнить имена и при их равенстве, - отчества.
Мне кажется, что хитринка в том, что ТС сам писать не хочет.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2014, 04:58     Блочная сортировка структур (Отсортировать массив структур по фамилии)
Еще ссылки по теме:

Отсортировать массив структур (фамилии студентов и размер их стипендии) по размеру стипендии C++
Создать массив структур; убрать фамилии абонентов, адреса которых изменились C++
C++ Массив структур Aeroflot, отсортировать пункты назначения в алфавитном порядке

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

Или воспользуйтесь поиском по форуму:
IGPIGP
04.03.2014, 04:58     Блочная сортировка структур (Отсортировать массив структур по фамилии)
  #11

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Мне кажется, что хитринка в том,
Похоже. Реализация ведь не от языка программирования зависит. Но от языка зависит, точно. Вообще, тёмный для меня предмет. В русском 33 буквы. Отбросив Ы и Ъ 31. Максимальное количество границ корзин из 1-буквенных строчек тоже 31. В принципе, написать значения для любого количества можно. Само по себе забавно. Тоже же рекурсивная задачка для n>31 ? Не... пойду спать. Спокойной ночи.

Yandex
Объявления
04.03.2014, 04:58     Блочная сортировка структур (Отсортировать массив структур по фамилии)
Ответ Создать тему
Опции темы

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