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

Сортировка элементов структуры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
kronos2
Сообщений: n/a
01.12.2010, 22:17     Сортировка элементов структуры #1
Цель программы: Считать и отсортировать информацию о студентах в группе. Сортировка просходит по номеру зачетки.

Код:

Код
#include "stdafx.h"
using namespace std;
 
struct MEMBER {
    char fio[30]; // ФИО
    char date[12]; // Дата рождения
    char adress[70]; // Место жительства
    char born[70]; // Место рождения
    char subject[30]; // Любимый предмет
    int book; // Номер зачетки
    char sport[30]; // Секция
    char lang[30]; // Язык
    char zodiak[30]; // Зодиак
    int money; // Степедия
};
#define m 16 // Кол-во студентов в базе
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale( LC_ALL, ".1251" );
 
    MEMBER group[m];
    MEMBER *gmember[m], *temp;
 
    FILE *data;
    data=fopen("D://input.txt","r"); // файл данных
 
    cout << "Исходная сортировка (Имя, Номер зачетки):" << endl << "______________________" << endl;
 
    for (int i=0;i<m;i++) {
        gmember[i]= &group[i]; // указатели на члена группы
 
        fgets(gmember[i]->fio,30,data); // считывание строк, доступ к эменту структуры через указатель
        cout << gmember[i]->fio;
        fgets(gmember[i]->date,12,data);
        fgets(gmember[i]->adress,70,data);
        fgets(gmember[i]->born,70,data);
        fgets(gmember[i]->subject,30,data);
        fscanf(data,"%d\n",&gmember[i]->book); // считывание чисел
        cout << gmember[i]->book << endl << endl;
        fgets(gmember[i]->sport,30,data);
        fgets(gmember[i]->lang,30,data);
        fgets(gmember[i]->zodiak,30,data);
        fscanf(data,"%d\n",&gmember[i]->money);
    }
 
    cout << "______________________" << endl;
 
    // Сортируем
    for(int k=0;k<m;k++) {
        for(int i=0;i<(m-1);i++) {
            if (gmember[i]->money < gmember[i+1]->money)
            {
                temp=gmember[i];
                gmember[i]=gmember[i+1];
                gmember[i+1]=temp;
            }
        }
    }
 
    // Выводим отсортированное
 
    cout << endl << "Отсортированная информация:" << endl;
 
    for (int i=0;i<m;i++) {
        cout << "ФИО: " << gmember[i]->fio;
        cout << "Дата рождения: " << gmember[i]->date;
        cout << "Адресс: " << gmember[i]->adress;
        cout << "Место рождения: " << gmember[i]->born;
        cout << "Любимый предмет: " << gmember[i]->subject;
        cout << "Номер зачетки: " << gmember[i]->book << endl;
        cout << "Секция: " << gmember[i]->sport;
        cout << "Изучаемый язык: " << gmember[i]->lang;
        cout << "Знак зодиака: " << gmember[i]->zodiak;
        cout << "Стипендия: " << gmember[i]->money << endl << endl;
    }
 
    _getch();
    return 0;
}
В исходном файле:
Код:


Код
Имя1
Дата Рождения1
....
Имя2
....
и т.д.

Проблема:
Код:

Код
    for(int k=0;k<m;k++) {
        for(int i=0;i<(m-1);i++) {
            if (gmember[i]->money < gmember[i+1]->money)
            {
                temp=gmember[i];
                gmember[i]=gmember[i+1];
                gmember[i+1]=temp;
            }
        }
    }
Условие if выполняется, но не сортирует ничего.

Софтина: VC++ 2010

Как исправить или предложите другой вариант сортировки.

Заранее спасибо всем откликнувшимся.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2010, 22:17     Сортировка элементов структуры
Посмотрите здесь:

C++ Сортировка данных структуры!
C++ Структуры(сортировка)
Структуры. Сортировка массива структуры C++
сортировка структуры. C++
C++ Структуры. Сортировка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.12.2010, 01:22     Сортировка элементов структуры #2
C
1
if (gmember[i]->money < gmember[i+1]->money)
это стипендия
kronos2
Сообщений: n/a
02.12.2010, 01:27     Сортировка элементов структуры #3
Тфу ты, а я третий день голову ломаю.
Спасибо, accept.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.12.2010, 01:55     Сортировка элементов структуры #4
Это попытка реализации не оптимизированной пузырьковой сортировки?
Вот как-то так...

C++
1
2
3
4
5
6
7
8
9
10
    for(int k=0;k<m-1;k++) {
        for(int i=k+1;i<m;i++) {
            if (gmember[k]->money < gmember[i]->money)
            {
                temp=gmember[k];
                gmember[k]=gmember[i];
                gmember[i]=temp;
            }
        }
    }
Добавлено через 19 минут
В общем случае, quicksort за вас уже написан и помещен в cstdlib (stdlib.h).
C++
1
2
3
4
5
6
7
8
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
 
// ...
 
qsort(gmember, m, sizeof(MEMBER), compare);

Не по теме:

Знаете ли вы, что в некоторых англоязычных странах слово MEMBER имеет тот же переносный смысл, что и в русском языке?

Yandex
Объявления
02.12.2010, 01:55     Сортировка элементов структуры
Ответ Создать тему
Опции темы

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