#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX_NA 10
#define MAX_N 20
typedef struct
{
char name[MAX_NA];
int num[MAX_N];
int sum;
}Person;
void sort_name(Person* arr);
void sort_num(Person* arr);
void sort_total(Person* arr);
int main()
{
Person arr[5] = { 0, };
int ch=0;
for (int i = 0; i < 5; i++)
{
printf("학생 %d 정보\n", i+1);
printf("이름: ");
scanf("%s", &arr[i].name);
printf("학번: ");
scanf("%s", &arr[i].num);
printf("총점: ");
scanf("%d", &arr[i].sum);
printf("\n");
}
while (1)
{
printf("1.이름 순(ABC순) 2.학번순(오름차순) 3.총점(내림차순)\n원하는 정렬을 선택하시오.:");
scanf("%d", &ch);
printf("\n");
if (ch == 1)
sort_name(arr);
else if (ch == 2)
sort_num(arr);
else if (ch == 3)
sort_total(arr);
else if (ch == 0)
break;
}
return 0;
}
void sort_name(Person *arr)
{
Person temp;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < i; j++)
{
if (strcmp(arr[i].name, arr[j].name) == -1)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
printf("-------------------------------\n");
printf("이름 학번 총점\n");
printf("-------------------------------\n");
for (int i = 0; i < 5; i++)
{
printf("%s %s %d\n", arr[i].name, arr[i].num, arr[i].sum);
}
printf("\n");
}
void sort_num(Person* arr)
{
Person temp;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < i; j++)
{
if (strcmp(arr[i].num, arr[j].num) == -1)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
printf("-------------------------------\n");
printf("이름 학번 총점\n");
printf("-------------------------------\n");
for (int i = 0; i < 5; i++)
{
printf("%s %s %d\n", arr[i].name, arr[i].num, arr[i].sum);
}
printf("\n");
}
void sort_total(Person* arr)
{
Person temp;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < i; j++)
{
if (arr[i].sum> arr[j].sum)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
printf("-------------------------------\n");
printf("이름 학번 총점\n");
printf("-------------------------------\n");
for (int i = 0; i < 5; i++)
{
printf("%s %s %d\n", arr[i].name, arr[i].num, arr[i].sum);
}
printf("\n");
}
skymong9.egloos.com/1425794
@breif C#의 Array.Sort(...)를 이용하여 구조체 배열을 정렬. @remarks 구조체 요소중 하나를 key로 하여 정렬합니다. myReverserClass의 내부 method를 알맞게 수정하여 사용하시면되겠습니다. 다들 아시겠지만 혹시나 저처럼 잘 모르는 초보분들을 위해서 Post합니다. 객체를 이용한 정렬법입니다. MSDN에 아주 잘 나와있죠.. http://msdn2.microsoft.com/en-us/library/system.array.sort(VS.71).aspx
[Example]
01: using System; 02:using System.Collections; 03:using
System.Text; 04: 05:namespace ConsoleApplication1 06:{ 07:class Program 08:{ 09:struct DD 10:{ 11:publicint key; 12:publicint value; 13: 14:publicDD(int _key,int _value){ key = _key; value = _value;} 15:} 16: 17:publicclass myReverserClass : IComparer 18:{ 19://Calls CaseInsensitiveComparer.Compare with the parameters reversed. 20:int IComparer.Compare(Object _x, Object
_y) 21:{ 22: DD x =(DD)_x; 23: DD y =(DD)_y; 24: 25:return x.key.CompareTo(y.key); 26:} 27:} 28: 29:staticvoidMain(string[] args) 30:{ 31:
DD[] dd ={newDD(4,3424),newDD(1,847),newDD(3,9876),newDD(5,423),newDD(2,745)}; 32: 33:
Console.WriteLine("before..."); 34:foreach (DD res in dd) 35:
Console.WriteLine(res.key.ToString()+" - "+ res.value.ToString()); 36: 37:/*Sorting */ 38: IComparer myComparer =newmyReverserClass(); 39: Array.Sort(dd,
myComparer); 40: 41: Console.WriteLine("after..."); 42:foreach (DD res in
dd) 43: Console.WriteLine(res.key.ToString()+" - "+ res.value.ToString()); 44:} 45:} 46:}