10814번
2023. 2. 6. 19:36ㆍ백준(c , c++)
728x90
<퀵정렬 방법>
#define _CRT_SECURE_NO_WARNINGS //경고 제거
#include <stdio.h>
#include<stdlib.h>
class person {
public:
int age;
char name[101];
int id;//가입한 순서를 저장할 변수 (나이가 같을 때 정렬조건을 위해 필요)
};
int compare(const void* arg1, const void* arg2) {
person* a = (person*)arg1; //전달받은 매개변수를 저장할 객체 만들기
person* b = (person*)arg2;
if (a->age > b->age)
return 1;
else if (a->age < b->age)
return -1;
else {
if (a->id > b->id)
return 1;
else
return -1;
}
}
int main() {
int N;
scanf("%d", &N);
person* h = new person[N];
int i = 0;
for (i; i < N; i++) {
scanf("%d %s", &h[i].age, h[i].name);
h[i].id = i; //입력받은 순서가 가입한 순서
}
qsort(h, N, sizeof(h[0]), compare);
for (i = 0; i < N; i++) {
printf("%d %s\n", h[i].age, h[i].name);
}
delete[] h;
return 0;
}
<병합정렬 방법>
#define _CRT_SECURE_NO_WARNINGS //경고 제거
#include <stdio.h>
int N;
class person {
public:
int age;
char name[101];
};
void merge(person data[],int first, int mid, int last) {
person* temp = new person[N];
int i = first, j = mid+1, k = first;
while (i <= mid && j<=last) {
if (data[i].age <= data[j].age)
temp[k++]= data[i++];
else
temp[k++] = data[j++];
}
while (i <= mid)
temp[k++] = data[i++];
while (j <= last)
temp[k++] = data[j++];
for (int a = first; a <= last; a++) {
data[a] = temp[a];
}
delete[] temp;
}
void mergesort(person data[],int first, int last) {
int mid;
if (first < last) {
mid = (first + last) / 2;
mergesort(data,first, mid );
mergesort(data,mid+1, last);
merge(data,first, mid, last);
}
}
int main() {
scanf("%d", &N);
person* h = new person[N];
int i = 0;
for (i; i < N; i++) {
scanf("%d %s", &h[i].age, h[i].name);
h[i].id = i;
}
mergesort(h,0,N-1);
for (i = 0; i < N; i++) {
printf("%d %s\n", h[i].age, h[i].name);
}
delete[] h;
return 0;
}

728x90
'백준(c , c++)' 카테고리의 다른 글
| 25501-printf 함수 (1) | 2023.02.08 |
|---|---|
| 좌표 압축 기법- 18870번 (0) | 2023.02.07 |
| 1181번 (0) | 2023.02.06 |
| 2차원 배열을 정렬할 때 구조체 사용하기 (1) | 2023.01.25 |
| 계수 정렬(counting sort) (0) | 2023.01.13 |