본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 2750번 : 수 정렬하기

by hyunipad 2022. 3. 8.
반응형

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

 

2750번: 수 정렬하기

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

www.acmicpc.net

2022.01.22 - [Algorithm/Theory] - [자바] 단순 선택 정렬과 단순 삽입 정렬

 

[자바] 단순 선택 정렬과 단순 삽입 정렬

단순 선택 정렬 단순 선택 정렬이란 배열중 가장 작은 요소를 선택해 알맞은 위치로 옮겨서 정렬하는 단순한 알고리즘입니다. 아래의 배열에서 가장 작은 요소인 1을 선택해 첫 번째 위치인 6과

hyunipad.tistory.com

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int N = Integer.parseInt(br.readLine());
		int[] numbers = new int[N];
		
		for(int i = 0 ; i < N ; i++) {
			int num = Integer.parseInt(br.readLine());
			numbers[i] = num;
		}

		insertionSort(numbers, N);
		
		for(int i = 0 ; i < N ; i++) {
			bw.write(String.valueOf(numbers[i]) + "\n");
		}
	
		br.close();
		bw.flush();
		bw.close();
	}
	
	static void swap(int[] a, int idx1, int idx2) {
		int temp = a[idx1];
		a[idx1] = a[idx2];
		a[idx2] = temp;
	}

	static void insertionSort(int[] a, int N) {
		for (int i = 1; i < N; i++) { // 두번째 요소부터 시작
			int j;
			int temp = a[i];
			for (j = i; j > 0 && a[j - 1] > temp; j--) { // 앞쪽의 요소와 비교
				a[j] = a[j - 1]; // 왼족의 요소와 교환
			}
			a[j] = temp;
		}
	}
}

사용한 알고리즘은 단순 삽입 정렬로 배열의 두 번째 요소부터 시작하여

앞쪽의 요소와 하나씩 비교하여 알맞은 자리에 삽입하는 단순한 정렬 알고리즘입니다.

오름차순 정렬이기 때문에 아래의 코드에서 자기보다 큰 수이면 계속 교환하다가 작은 수가 나오면 교환을 멈추게 되어

알맞은 위치에 정렬이 됩니다.

for (j = i; j > 0 && a[j - 1] > temp; j--) { // 앞쪽의 요소와 비교
				a[j] = a[j - 1]; // 왼족의 요소와 교환
}

 

반응형

댓글