С / С ++ программа вылетает при пузырьковой сортировке

0

У меня есть массив структур с различными типами данных, я хочу отсортировать мой массив по поплавкам своих структур, от наименьшего до большого... моя программа работает нормально, однако, когда я делаю свой пузырькорт для сортировки массива структур, программа сбой или больше не реагирует... мой код:

#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>

using namespace std;


struct Stud{
        long matrnr;
        char vorname[30];
        char name[30];
        char datum[30];
        float note;
    };



void sortieren(Stud mystud[], int studentCounter) {
Stud tmp;   
for (int i = 0 ; i< studentCounter; ++i) {
    for (int j=0; j< studentCounter-1;  ++j) {
        if (mystud[j].note > mystud[j+1].note) 
        {
                tmp = mystud[j+1];
                mystud[j+1] = mystud[j];
                mystud[j] = tmp;
            }           
        }
    }       
}           


int main(int argc, char **argv)
{   


    const int MAX = 30;
    Stud stud;  
    Stud mystud[30]; // <<-- Array of "Stud" type
    //memset((void*)mystud,0,sizeof(mystud) * sizeof(Stud));
    int wordCounter(0);
    int i(0); //thats the charCounter or index
    int studentCounter(0);
    char wort[MAX];
    //int matrnr;
    //char vorname[MAX];
    //char name[MAX];
    //char datum[MAX];
    //float note;
        ....
....
....
....
  • 0
    Это упражнение, или вас интересует самый простой способ сортировки массива?
  • 2
    Понимаете ли вы, что вы перемещаете не целые записи учеников, а просто копируете поле для note ?
Показать ещё 5 комментариев
Теги:
arrays
struct

1 ответ

0

вот как это работает:

void sortieren(Stud mystud[], int studentCounter) {
Stud tmp;   
for (int i = 0 ; i< studentCounter; ++i) {
    for (int j=0; j< studentCounter-1;  ++j) {
        if (mystud[j].note > mystud[j+1].note) 
        {
                tmp.matrnr = mystud[j+1].matrnr;
                strcpy(tmp.vorname,mystud[j+1].vorname);
                strcpy(tmp.name,mystud[j+1].name);
                strcpy(tmp.datum , mystud[j+1].datum);
                tmp.note = mystud[j+1].note;

                mystud[j+1].matrnr = mystud[j].matrnr;
                strcpy(mystud[j+1].vorname ,mystud[j].vorname);                 
                strcpy(mystud[j+1].name , mystud[j].name);
                strcpy(mystud[j+1].datum ,mystud[j].datum);
                mystud[j+1].note = mystud[j].note;

                mystud[j].matrnr = tmp.matrnr;
                strcpy(mystud[j].vorname , tmp.vorname);
                strcpy(mystud[j].name , tmp.name);
                strcpy(mystud[j].datum , tmp.datum);
                mystud[j].note = tmp.note;                  

            }           
        }
    }       
}
..
...
...
...

sortieren(mystud , studentCounter);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню