Last active
October 13, 2016 07:19
-
-
Save fpdjsns/91c71ae97c341679b179a6cd35056917 to your computer and use it in GitHub Desktop.
학생 정보(학번, 이름, 성적)을 입력받아 성적 순 학번 순으로 퀵정렬
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<string.h> | |
#pragma warning(disable:4996) | |
#define MAX 100 | |
typedef struct student | |
{ | |
int hakbun; //학번 | |
char name[40]; //이름 | |
int score; //성적 | |
}student; | |
//배열 교환 | |
void EXCHANGE(student* arr, int a, int b) | |
{ | |
student temp; | |
temp = arr[a]; | |
arr[a] = arr[b]; | |
arr[b] = temp; | |
} | |
//(정렬할 배열, 하한, 상한, 1(학번) or 2(성적) | |
void QuickSort(student *arr, int m, int n, int num) | |
{ | |
int i = m; //상한 | |
int j = n; //하한 | |
int pivot = m; //key값 index | |
if (m < n){ //상한이 하한보다 낮은 경우 | |
while (1){ | |
if (num == 1) //학번 | |
{ | |
while (arr[i].hakbun < arr[pivot].hakbun)i++; //큰 수 찾기 | |
while (arr[j].hakbun > arr[pivot].hakbun)j--; //작은 수 찾기 | |
if (i < j){ | |
EXCHANGE(arr, i, j); //두 값 교환 | |
} | |
else{ //작은 값이 큰 값보다 뒤에 있을 경우 | |
EXCHANGE(arr, j, pivot); //pivot과 작은 값을 교환 | |
break; //반복문종료 | |
} | |
} | |
else //성적(내림차순 정렬) | |
{ | |
while (arr[i].score > arr[pivot].score)i++; //작은 수 찾기 | |
while (arr[j].score < arr[pivot].score)j--; //큰 수 찾기 | |
if (i < j){ | |
EXCHANGE(arr, i, j); //두 값 교환 | |
} | |
else{ //작은 값이 큰 값보다 뒤에 있을 경우 | |
EXCHANGE(arr, i, pivot); //pivot과작은값을교환 | |
break; //반복문 종료 | |
} | |
} | |
} | |
QuickSort(arr, m, j - 1, num); //pivot 왼쪽 배열 정렬 | |
QuickSort(arr, j + 1, n, num); //pivot 오른쪽 배열 정렬 | |
} | |
} | |
void main(){ | |
student s[MAX]; | |
int i = 0; //반복문변수 | |
int num; | |
char ch[40]; | |
printf("학생 수를 입력하세요 : "); | |
scanf("%d", &num); | |
//학생 정보 입력 | |
for (i = 0; i < num; i++) | |
{ | |
printf("학생 정보 입력(학번, 이름, 성적) : "); | |
scanf("%d", &s[i].hakbun); | |
scanf("%s", ch); | |
strcpy(s[i].name, ch); | |
scanf("%d", &s[i].score); | |
} | |
printf("성적 순 학생 출력\n"); | |
QuickSort(s, 0, num - 1, 2); //퀵 소트(학생 배열,0,num-1,2) | |
for (i = 0; i < num; i++) | |
printf("%d\t%s\t%d\n", s[i].hakbun, s[i].name, s[i].score); | |
printf("\n"); | |
printf("학번 순 학생 출력\n"); | |
QuickSort(s, 0, num - 1, 1); //퀵 소트(학생 배열,0,num-1,1) | |
for (i = 0; i < num; i++) | |
printf("%d\t%s\t%d\n", s[i].hakbun, s[i].name, s[i].score); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment