네 번째 과제에 대한 코드 짜보기 + 정렬공부
정렬 공부 _ 자료구조 인강 Lesson 34
정렬해서 가장 중요한건 무엇을 기준으로? 정하는. 즉 키값이 중요
정렬방법의 분류 - 실행방법 비교식 정렬 -> 비교하고자 하는 각 키 값들을 한번에 두 개씩 비교하여 교환 분산식 정렬 -> 키 값을 기준으로 하여 자료를 여러 개의 부분 집합으로 분해하고 각 부분집합을 정렬함으로써 전체를 정렬하는 방식
선택정렬과 버블정렬
선택 정렬
- 전체 원소 중 가장 작은 원소 찾아 선택 (작은원소부터 크게하는방법) 내림 차순이면 가장 큰 원소를 찾아서 자리를 교환
- 두 번쨰 원소도 마찬가지
- 이 과정 반복
문제
내 코드
#include <stdio.h>
#include <stdlib.h>
typedef struct data{
char name[10];
int korean;
int english;
int math;
int total;
int rank;
}Data;
int input(const char *msg);
void get_info(int count, Data *people);
void ranking(int count,Data *people);
void total_info(int count, Data *people);
void total_info(int count, Data *people);
void Bubble_sort(int count, Data *people);
//순위 매기기 전에
//총점구하는 함수
int main(void){
int count = input("인원을 입력하세요");
Data *people = (Data *)malloc(sizeof(Data*)*count); // people 할당
//정보 가져오기
get_info(count, people);
//순위 매기기
ranking(count, people);
// 종합정보 출력
total_info(count, people);
// 동적할당 해제
free(people);
return 0;
}
int input(const char *msg){
int count;
printf("%s 입력 : ",msg);
scanf("%d",&count);
return count;
}
void get_info(int count, Data *people)
{
for(int i = 0 ; i < count; i++)
{
printf("%d번째 사람 이름 :",i+1);
scanf("%s",people[i].name);
printf("%d번째 사람 국어점수 :",i+1);
scanf("%d",&people[i].korean);
printf("%d번째 사람 영어점수 :",i+1);
scanf("%d",&people[i].english);
printf("%d번째 사람 수학점수 :",i+1);
scanf("%d",&people[i].math);
//총점 구하기
people[i].total = people[i].math + people[i].korean + people[i].english;
}
}
void ranking(int count,Data *people){
//순위 매기기
int cnt; //자신보다 큰 숫자의 개수를 센다
for(int i = 0; i < count; i++)
{
cnt = 0; // 매번 i 바뀔 때 초기화.
for (int j = 0; j < count; j++)
{
if(people[i].total < people[j].total) //
{
cnt++;
}
}
people[i].rank = cnt+1; // 등수 결정
}
}
void total_info(int count, Data *people)
{
printf("---------------------------------------------------------\n");
printf("이름\t국어\t영어\t수학\t총점\t순위\n");
for(int i = 0 ; i < count; i++)
{
printf("|%s\t|%d\t|%d\t|%d\t|%d\t|%d\t\n",people[i].name, people[i].korean, people[i].english, people[i].math, people[i].total, people[i].rank);
printf("--------------------------------------------------------\n");
}
}
void Bubble_sort(int count, Data *people)
{
Data temp;
int cnt;
for(int i = 0; i < count-1; i++)
{
for(int j = 0; j < count-1; j++)
{
if(people[j].total < people[j+1].total)
{
temp = people[j];
people[j] = people[j+1];
people[j+1] = temp;
}
}
people[i].rank = cnt + 1;
}
printf("\n정렬 후");
for (int i = 0; i< count; i++){
printf("%d\n",people[i].total);
}
}
참고자료
kg아이티뱅크학원 (자료구조 수업) 선택정렬 참고블로그