C 구조체 배열 정렬 - C gujoche baeyeol jeonglyeol

#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에 아주 잘 나와있죠..
    //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:             public int key;
12:             public int value;
13:
14:             public DD(int _key, int _value) { key = _key; value = _value; }
15:         }
16:
17:         public class 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:         static void Main(string[] args)
30:         {
31:             DD[] dd = { new DD(4, 3424), new DD(1, 847), new DD(3, 9876), new DD(5, 423), new DD(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 = new myReverserClass();
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: }

Toplist

최신 우편물

태그