Сортировка структуры по полю "фамилия" - C (СИ)
Формулировка задачи:
Нужно отсортировать структуру. Не знаю как это сделать, помогите пожалуйста! Сортировка по фамилии, то есть Фамилии в алфавитном порядке.
Вот программка без сортировки
Пробовала так отсортировать но там ошибки
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
//---------------------------------------------------------------------------
struct Student
{ char Full_Name[50];
int Day;
int Month;
int Year;
char Group[10];
//char d;
};
int main(){
char Spisok[3] ;
char tmp1[50];
char tmp3[10];
int i,j,tmp2,tmp5,tmp4;
struct Student St[100];
for (i = 1; i <=3; i++) {
printf("vvod svedeniy o %d studente\n",i);
printf ("vvedite fio studenta ");
scanf("%s",St[i].Full_Name);
printf("Vvedite den rozdeniya studenta ");
scanf("%d",&St[i].Day);
printf("Vvedite mesyac rozdeniya studenta ");
scanf("%d",&St[i].Month);
printf("Vvedite god rozdeniya studenta ");
scanf("%d",&St[i].Year);
printf("Vvedite gruppu studenta ");
scanf("%s",St[i].Group);
}
printf("Neotsortirovanny massiv studentov\n");
for (i=1;i<=3;i++) {
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);
}
printf("Otsortirovanny massiv studentov\n");
for (i=1;i<=3;i++){
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group); }
getch();
return 0;
}
//---------------------------------------------------------------------------//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
//---------------------------------------------------------------------------
struct Student
{ char Full_Name[50];
int Day;
int Month;
int Year;
char Group[10];
//char d;
};
int main(){
char Spisok[3] ;
char tmp1[50];
char tmp3[10];
int i,j,tmp2,tmp5,tmp4;
struct Student St[100];
for (i = 1; i <=3; i++) {
printf("vvod svedeniy o %d studente\n",i);
printf ("vvedite fio studenta ");
scanf("%s",St[i].Full_Name);
printf("Vvedite den rozdeniya studenta ");
scanf("%d",&St[i].Day);
printf("Vvedite mesyac rozdeniya studenta ");
scanf("%d",&St[i].Month);
printf("Vvedite god rozdeniya studenta ");
scanf("%d",&St[i].Year);
printf("Vvedite gruppu studenta ");
scanf("%s",St[i].Group);
}
printf("Neotsortirovanny massiv studentov\n");
for (i=1;i<=3;i++) {
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);
}
printf("Otsortirovanny massiv studentov\n");
for (i = 0; i <=3; i++) {
for (j = 0; j <=3-i-1; j++) {
if (St[j].Full_Name>St[j+1].Full_Name) {
tmp1=St[j].Full_Name;
tmp4=St[j].Day;
tmp5=St[i].Month;
tmp2=St[j].Year;
tmp3=St[j].Group;
St[j].Full_Name=St[j+1].Full_Name;
St[j].Day=air[j+1].Day;
St[j].Month=air[j+1].Month;
St[j].Year=air[j+1].Year;
St[j].Group=air[j+1].Group;
St[j+1].Full_Name=tmp1;
St[j+1].Day=tmp4;
St[j+1].Month=tmp5;
St[j+1].Year=tmp2;
St[j+1].Group=tmp3;
}
}
}
for (i=1;i<=3;i++){
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group); }
getch();
return 0;
}
//---------------------------------------------------------------------------Решение задачи: «Сортировка структуры по полю "фамилия"»
textual
Листинг программы
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
//---------------------------------------------------------------------------
#define NUM 4
struct Student
{ char Full_Name[50];
int Day;
int Month;
int Year;
char Group[10];
};
void insert(struct Student *St, int n)
{
int i, j;
struct Student temp;
for (i=1; i<n; ++i) {
temp = St[i];
for (j=i-1; (j>=0) && (strcmp(temp.Full_Name, St[j].Full_Name)<0); j--)
St[j+1] = St[j];
St[j+1] = temp;
}
}
int main(void)
{
char Spisok[3] ;
char tmp1[50];
char tmp3[10];
int i,j,tmp2,tmp5,tmp4;
struct Student St[100];
for (i = 0; i<NUM; i++) {
printf("vvod svedeniy o %d studente\n",i+1);
printf ("vvedite fio studenta ");
scanf("%s",St[i].Full_Name);
printf("Vvedite den rozdeniya studenta ");
scanf("%d",&St[i].Day);
printf("Vvedite mesyac rozdeniya studenta ");
scanf("%d",&St[i].Month);
printf("Vvedite god rozdeniya studenta ");
scanf("%d",&St[i].Year);
printf("Vvedite gruppu studenta ");
scanf("%s",St[i].Group);
}
printf("Neotsortirovanny massiv studentov\n");
for (i=0; i<NUM; i++) {
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);
}
printf("Otsortirovanny massiv studentov\n");
insert(St, NUM);
for (i=0; i<NUM; i++){
printf("%s %d/%d/%d %s\n",St[i].Full_Name,
St[i].Day,St[i].Month,St[i].Year,
St[i].Group);
}
getch();
return 0;
}
//---------------------------------------------------------------------------