게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
(본삭금) AlienWare님.. C 정렬질문이요..
게시물ID : programmer_9298짧은주소 복사하기
작성자 : 5초안에
추천 : 0
조회수 : 480회
댓글수 : 5개
등록시간 : 2015/04/12 19:22:19
옵션
  • 본인삭제금지
1. fgets으로 "19, kim"형태로 나이와 이름을 받은 후, 토큰으로 분리
2. age_get을 호출하여 비어있는 Age 배열첨자를 얻은 후 그 원소에 입력 내용을 저장.
3. 위 그림과 같이 Root에서 출발해서 next로 연결되는 배열의 원소들이 오름차순을 이루도록 지금 입력받은 배열 원소를 적절한 위치에 삽입.(맨끝 next는 -1로 설정하여 마지막임을 표시)
4. Max번 반복.
5. 입력후, Root에서 출발하여 끝까지 따라가면서 모은원소들의 내용을 반복구문으로 "19, Kim"형태로 출력.

1428674433251.jpg

AlienWare님께서 가르쳐주신 이 코드중
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Header Files
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
// Structure Definition
struct Person{
    int tag;
    int age;
    char name[10];
    int next;
};
 
// Global Variables
const int numOfPeople = 5;
struct Person people[numOfPeople];
int root = 0;
 
// Functions
int initPerson() {
    int i;
    for (i = 0; i < numOfPeople; i++) {
        people[i].tag = 0;
        people[i].next = -1;
    }
 
    return 0;
}
 
int insertionSort(int newerIndex) {
    int index, pointer, ppointer;
    ppointer = -1;
    pointer = root;
    for (index = 0; index < numOfPeople; index++)
    {
        if (people[newerIndex].age < people[pointer].age)
        {
            if (ppointer == -1)
                root = newerIndex;
            else
                people[ppointer].next = newerIndex;
 
            people[newerIndex].next = pointer;
            break;
        }
        else if (people[pointer].next == -1)
        {
            people[pointer].next = newerIndex;
            break;
        }
        else
        {
            ppointer = pointer;
            pointer = people[pointer].next;
        }
    }
    people[newerIndex].tag = 1;
    return 0;
}
 
int getPerson(int index) {
    if (people[index].tag != 0)
        return 1;
 
    char fgetBuffer[40];
    char *tokenPointer;
 
    fgets(fgetBuffer, sizeof(fgetBuffer), stdin);
    fgetBuffer[strlen(fgetBuffer) - 1= '\0';
 
    tokenPointer = strtok(fgetBuffer, " ");
    people[index].age = atoi(tokenPointer);
    tokenPointer = strtok(NULL, " ");
    strcpy(people[index].name, tokenPointer);
 
    if (index != 0// 첫 원소
        insertionSort(index);
    else
        people[index].tag = 1;
 
    return 0;
}
 
// Main
int main(){
// Init DataArray
    initPerson();
 
// Get Data
    int index;
    for (index = 0; index < numOfPeople; index++)
    {
        getPerson(index);
    }
 
    // Print result
    int pointer = root;
    for (index = 0; index<numOfPeople; index++)
    {
        printf(" T : %d , Age : %d, Name : %s, next : %d\n", people[pointer].tag, people[pointer].age, people[pointer].name, people[pointer].next);
 
        pointer = people[pointer].next;
    }
}
cs


정렬하는 부분있잖아요... 제가 생각하는 퀵소트나 선택정렬의 개념이랑 많이 다른거 같아서 이해가 정말 안됩니다...
죄송하지만 이 부분 설명좀 해 주실수 있으신가요...????
머리 싸매고 싸매도 안풀립니다 ㅠㅠ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29


int insertionSort(int newerIndex) {
    int index, pointer, ppointer;
    ppointer = -1;
    pointer = root;
    for (index = 0; index < numOfPeople; index++)
    {
        if (people[newerIndex].age < people[pointer].age)
        {
            if (ppointer == -1)
                root = newerIndex;
            else
                people[ppointer].next = newerIndex;
 
            people[newerIndex].next = pointer;
            break;
        }
        else if (people[pointer].next == -1)
        {
            people[pointer].next = newerIndex;
            break;
        }
        else
        {
            ppointer = pointer;
            pointer = people[pointer].next;
        }
    }
    people[newerIndex].tag = 1;
    return 0;
cs






전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호