CS 지식/Algorithm-Problem Solving 정리

[백준] 2750 수 정렬하기 : 기본적인 정렬들을 구현해 풀어보기

Hoplin 2022. 1. 11. 15:46
반응형

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

 

2750번: 수 정렬하기

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

www.acmicpc.net

기본적인 정렬 문제이다. 첫번째 줄에 n을 받고 그 다음줄부터 총 n개의 수를 받아서, 정렬하는 문제이다. 버블정렬, 선택정렬, 삽입정렬, 퀵정렬, 파이썬 내장 sort, 숏코딩 총 6가지 방법으로 풀어보았다

from typing import MutableSequence

'''
python short coding


print(*sorted([int(input()) for _ in range(int(input()))]),sep = "\n")
'''

i = int(input())
li = [int(input()) for _ in range(i)]


# 버블 정렬
def bubble_Sort(a : MutableSequence) -> None:
    n = len(a)
    for i in range(n - 1):
        for j in range(n - 1, i, -1):
            if a[j - 1] > a[j]:
                a[j],a[j-1] = a[j-1],a[j]

# 선택정렬
def selection_sort(a : MutableSequence) -> None:
    n = len(a)
    for i in range(n - 1):
        min = i
        for j in range(i + 1,n):
            if a[j] < a[min]:
                min = j
        a[min],a[i] = a[i],a[min]

# 삽입정렬
def insertion_sort(a : MutableSequence) -> None:
    n = len(a)
    for i in range(1,n):
        j = i
        highlight_value = a[i]
        while j >0 and a[j - 1] > highlight_value:
            a[j] = a[j-1]
            j -= 1
        a[j] = highlight_value

def quick_sort(a : MutableSequence, left : int, right : int) -> None:
    pl = left
    pr = right
    pivot = a[(left + right) // 2]

    while pl <= pr:
        while a[pl] < pivot: pl += 1
        while a[pr] > pivot: pr -= 1

        if pl <= pr:
            a[pl],a[pr] = a[pr],a[pl]
            pl += 1
            pr -= 1
    
    if left < pr:
        quick_sort(a,left,pr)
    if right > pl:
        quick_sort(a,pl,right)

# 파이썬 내장 sort()
def python_inner_sort(a : MutableSequence) -> MutableSequence:
    return sorted(a)


#bubble_Sort(li)
#insertion_sort(li)
#selection_sort(li)
#quick_sort(li,0,len(li) - 1)
li = python_inner_sort(li)
print(*li,sep='\n')
반응형