[알고리즘] 정렬

yyy·2024년 2월 25일

coding_study

목록 보기
4/4

직접 정렬하는 방법 - sort() 사용

ex)

arr = [3,1,4,5,2]
arr.sort()
print(arr)

ex-결과)

[1,2,3,4,5]

정렬로직

내부적으로 어떻게 돌아가는지 알아야함. 대표적인 정렬로직에는 선택정렬, 삽입정렬, 버블정렬 등이 있다.

선택정렬

: 최대값, 최소값을 찾는 로직과 두 값을 바꿔주는 로직을 혼합하여 구현하는 로직이다.
1. 리스트 내의 최소값을 찾는다.
2. 리스트의 첫번째 값과 최소값을 바꿔준다.
3. 첫번째를 제외한 리스트 내에서 최소값을 찾느다.
4. 리스트의 두번째 값과 3번의 최소값을 바꿔준다.
5. 나머지 리스트를 상대로 3~4번을 반복한다.

위의 3,1,4,5,2가 선택정렬로 어떻게 바뀌는지 보면

이것을 코드로 구현해본다.

이것이 기본적인 정렬로직이다. 이러한 기본 정렬로직은 이해하기 쉽지만 효과적인 로직은 아니다. 지금은 5개 밖에 없어 별차이 없다고 느껴지지만 많은 숫자들을 정렬하기 위해서 매번 범위 내 최소값을 구하는 것은 비효율적이다.

거품정렬

: 앞에서 두 수를 비교해서 큰 수를 뒤로 보내는 것을 반복한다. 그럼 가장 큰 수가 맨 뒤로 간다. 제일 큰수가 맨 뒤에 있기 때문에 다음에는 마지막 전까지만 반복한다. 이렇게 제일 처음 수가 정렬될때까지 반복한다. 큰수가 계속적으로 뒤로 이동하는 모습이 방울이 움직이는 모습과 같다고 해서 거품정렬이라고 불린다.
로직은 다음과 같다.
1. 처음 숫자와 두번째 숫자를 비교해서 앞의 수가 크면 두 수를 바꿔준다.
2. 두번째 수와 세번째 수를 비교해서 앞의 수가 크면 두수를 바꿔준다.
3. 마지막 수의 차례가 될때까지 2번을 반복한다.
4. 마지막 수 정렬까지 끝나면 처음으로 돌아와 마지막 하나 전까지 다시 변경을 반복한다.
5. 처음수가 정렬될때까지 앞의 정렬을 반복한다.

위의 3,1,4,5,2가 거품정렬로 어떻게 바뀌는지 보면

이것을 코드로 구현해본다.

삽입정렬

: 새로운 리스트에 기존 리스트의 값을 위치에 맞게 넣는 방식으로 진행된다. 리스트 안에 새로운 값을 삽입한다고 해서 삽입정렬이라는 이름으로 불린다.
로직은 다음과 같다.
1. 리스트에서 첫번째 값을 꺼내어 새로운 리스트에 넣음
2. 두번째 값을 꺼내어 새로운 리스트의 첫번째 값과 비교하여 정렬시킴
3. 세번째 값을 2번의 리스트의 정렬된 위치에 삽입시킴
4. 마지막까지 정렬중인 리스트에 알맞은 값을 삽입시킴

위의 3,1,4,5,2가 삽입정렬로 어떻게 바뀌는지 보면

이것을 코드로 구현해본다.

이처럼 삽입정렬은 기존 리스트와 새로운 리스트가 필요하다. 하지만 꼭 두개의 리스트가 필요한 것은 아니다. 하나의 리스트 안에 두개의 리스트가 있다고 생각하고 삽입정렬을 수행할수도 있다.

위의 3,1,4,5,2가 어떻게 바뀌는지 보면

이것을 코드로 구현해본다.

0개의 댓글