정렬(sorting) 개념 정리

  • 버블 정렬, 합병 정렬, 파이썬 내장 정렬함수에 대해 정리했다
  • 파이썬을 사용한다.

🐥정렬 알고리즘

정렬 알고리즘은 두 가지 시간 복잡도로 분류할 수 있다.

$O(n^2)$ $O(nlogn)$
Insertion sort Quick sort
Selection sort Merge sort
Bubble sort Heap sort

시간 복잡도

시간 복잡도란 문제를 푸는데 걸리는 시간을 입력 n의 함수 관계를 사용하여 나타낸 것이다.

알고리즘의 시간복잡도는 주로 Big-O 표기법을 사용하는데, 이는 계수를 모두 없앤 뒤 최대 차항만을 표기하는 방법이다.

예를 들어, 어떤 문제를 푸는데 최대 $8n^2 + 2n + 1$번의 연산이 필요하다면 계수를 모두 없앤 식은 $n^2 + n$이 된다.

이 상태에서 최대 차항은 $n^2$이므로, 결과적으로 시간 복잡도는 $O(n^2)$로 표기된다.

💧버블 정렬

버블 정렬은 가장 간단한 정렬 방법이다.

  1. 인접한 두 원소를 비교한다.
  2. [왼쪽 원소] > [오른쪽 원소] 라면 swap! 한다.
  3. 가장 큰 원소부터 오른쪽에 정렬된다.
  4. 데이터가 하나씩 정렬되면서 비교에서 제외된다.

📝 문제

백준 2750 : 수 정렬하기 - Bronze 1

🤝합병 정렬

합병 정렬은 분할 정복(Divide and Conquer) 방식으로 설계된 알고리즘이다.

분할 정복 알고리즘은 주로 재귀 함수로 구현되며 다음의 3단계로 이루어진다.

  1. Divide : 문제 분할
  2. Conquer : 쪼개진 작은 문제 해결
  3. Combine : 해결된 작은 문제들을 다시 합침

📝 문제

백준 2751 : 수 정렬하기 2 - Silver 5

🥧파이썬 정렬함수

하지만 정렬할 일은 많고, 매번 정렬함수를 구현하기는 어렵다. 파이썬에 내장된 정렬함수를 사용하면 편리하게 구현할 수 있다.

파이썬 정렬 문서 바로가기

list.sort()

  • 리스트의 메소드로, 리스트의 원본을 정렬된 형태로 바꾸어 놓으며 None을 반환한다.
  • 디폴트 값은 오름차순 정렬이지만, key 값에 함수(람다함수)를 보내면 원하는 조건대로 정렬이 가능하다. ex) 내림차순 정렬 : reverse에 true를 보내줌

sorted()

  • 정렬된 리스트를 반환하는 함수입니다. 인자로 iterable 객체를 받는다.
  • 역시 key 값을 통해 원하는 조건으로 정렬이 가능하다.
  • 예시 코드
    sorted(student_objects, key=attrgetter('age'), reverse=True)
    [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    

📝 문제

백준 10825 : 국영수 - Silver 4

📚 과제

백준 10804 : 카드 역배치 - Bronze 2 백준 12840 : 창용이의 시계 - Bronze 3 백준 11651 : 좌표 정렬하기2 - Silver 2 백준 1758 : 알바생 강호 - Silver 4 백준 1431 : 시리얼 번호 - Silver 3 백준 1946 : 신입 사원 - Silver 1 백준 1026 : 보물 - Silver 4


출처 https://github.com/Altu-Bitu-2/Notice/blob/main/00.%20%EA%B0%95%EC%9D%98%EC%9E%90%EB%A3%8C/01.%20%EC%A0%95%EB%A0%AC.pdf

Categories:

Updated:

Leave a comment