[파이썬] - 버블 / 선택 정렬

zsunny·2022년 7월 7일
0

[Python] 문법

목록 보기
12/18

🔎 버블 정렬 _ 시간 복잡도 O(n2)

  • 앞 인덱스와 뒤 인덱스를 비교해 앞 인덱스 값이 더 크면 순서를 바꾼다.
  • 앞 인덱스부터 마지막 인덱스까지 차례대로 진행하면 제일 큰 숫자가 맨 뒤에 위치하게 된다.
  • 결국 앞 뒤 비교를 통해 최댓값이 맨 뒤부터 차례대로 위치하게 된다.
  • 이러한 일련의 과정을 통해 정렬하는 것을 버블 정렬이라고 한다.

def bubble(arr):
    for i in range(len(arr)-1):
        for j in range(len(arr)-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return

nums = [2, 8, 6, 4, 1]
bubble(nums)
print(nums)

• 바깥쪽 for문 range의 범위가 len(arr) - 1 인 이유는,
  마지막 0번째 인덱스 하나와 비교할 인접 인덱스가 존재하지 않기 때문이다. (비교 불가)

• 안쪽 for문 range의 범위가 len(arr) - i - 1인 이유는,
  바깥쪽 for문이 한번씩 돌면서 제일 큰 숫자들이 맨 뒤에 정렬되어
  이미 정렬된 부분은 비교할 필요가 없기 때문에 - i를 하는 것이 효율적이다.

🔎 선택 정렬 _ 시간 복잡도 O(n2)

  • 첫번째 for문에서 모든 값 중 최솟값을 골라 [0]번 인덱스에 위치시킨다.
  • 두번째 for문에서는 남은 인덱스 값 중 최솟값을 골라 [1]번 인덱스에 위치시킨다.
  • 결국 남은 값의 전체 비교를 통해 최솟값이 맨 앞부터 차례대로 위치하게 된다.
  • 이러한 일련의 과정을 통해 정렬하는 것을 선택 정렬이라고 한다.

def selection(arr):
    for i in range(len(arr)-1):
        min_idx = i
        for j in range(i, len(arr)):
            if arr[min_idx] > arr[j]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]

    return

nums = [2, 9, 1, 7, 3]
selection(nums)
print(nums)

• 바깥쪽 for문 range의 범위가 len(arr) - 1 인 이유는,
  마지막 [-1]번째 인덱스가 비교할 인접 인덱스가 없기 때문이다. (비교 불가)

• min_idx에 시작 인덱스 번호를 넣고 시작한다.

• 안쪽 for문을 돌면서 최솟값을 가진 인덱스를 발견하면 기존 min_idx 값으로 치환하면서 진행한다.

🙏 참고

👉 파이썬 버블정렬, 선택정렬, 삽입정렬

profile
매일 성장하는 예비 웹 개발자 🌱

0개의 댓글