백준 2750- 정렬 문제
Computer Science/알고리즘(백준+프로그래머스)

백준 2750- 정렬 문제

https://www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

solution 1)  선택 정렬 이용

: 선택 정렬은 첫 번째 자료를 두 번째 자료부터 마지막 자료까지 차례대로 비교하여 가장 작은 값을 찾아 첫 번째에 놓고, 두 번째 자료를 세 번째 자료부터 마지막 자료까지와 차례대로 비교하여 그 중 가장 작은 값을 찾아 두 번째 위치에 놓는 과정을 반복하며 정렬을 수행한다.

: in-place 정렬로 입력 배열 이외의 메모리를 요구하지 않는 알고리즘이다.

 

#include<iostream>
#include<vector>
using namespace std;

void selection_sort(vector<int>list,int n) {
	int least = 0;
	int temp = 0;
	for (int i = 0; i < n; i++) {
		least = i;
		for (int k = i + 1; k < n; k++) {
			if (list[k] < list[least]) {
				least = k;
			}
		}
		if (i != least) {
			swap(list[i], list[least]);
		}
	}
	for (int j = 0; j < n; j++) {
		cout << list[j] << endl;
	}
}

void swap(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

int main() {
	int M;
	vector<int>arr;
	cin >> M;
	for (int i = 0; i < M; i++) {
		int x;
		cin >> x;
		arr.push_back(x);
	}
	selection_sort(arr, M);
}

 

solution 2)  STL sort 사용

#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
int main() {
	int M;
	vector<int>arr;
	cin >> M;
	for (int i = 0; i < M; i++) {
		int x;
		cin >> x;
		arr.push_back(x);
	}
	sort(arr.begin(), arr.end());
	for (int j = 0; j < M; j++) {
		cout << arr[j] << endl;
	}

}