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