logo

Python의 버블 정렬

버블 정렬(Bubble Sort)은 목록을 반복적으로 살펴보고, 인접한 요소를 비교하고, 순서가 잘못된 경우 교체하는 간단한 정렬 알고리즘입니다. 작은 요소가 목록의 맨 위로 '버블'되기 때문에 '버블 정렬'이라는 이름이 붙었습니다. 가장 효율적인 정렬 알고리즘은 아니지만 이해하고 구현하기가 쉽기 때문에 정렬 알고리즘을 배우기 위한 좋은 출발점이 됩니다. 이 기사에서는 Bubble Sort의 개념을 자세히 살펴보고, Python 구현에 출력을 제공하고, 알고리즘의 시간 복잡도에 대해 논의합니다.

버블 정렬 이해

버블 정렬의 기본 아이디어는 목록을 여러 번 반복하여 인접한 요소를 비교하고 순서가 잘못된 경우 교체하는 것입니다. 더 이상 교체가 필요하지 않을 때까지 프로세스가 계속되며 이는 이제 목록이 정렬되었음을 나타냅니다. 이 알고리즘은 거품이 표면으로 떠오르는 것처럼 작은 요소가 점차 목록의 맨 위로 이동하는 방식에서 이름을 얻었습니다.

Bubble Sort 알고리즘의 단계를 분석해 보겠습니다.

캣 팀프
  1. 목록 반복: 목록의 처음부터 시작하여 인접한 요소의 각 쌍을 비교합니다.
  2. 비교 및 교체: 요소의 순서가 잘못된 경우 교체합니다. 이렇게 하면 더 큰 요소가 '버블업'되고 작은 요소가 아래로 이동하는 것이 보장됩니다.
  3. 계속 반복: 목록 끝에 도달할 때까지 인접한 요소의 각 쌍에 대해 프로세스를 반복합니다.
  4. 정렬될 때까지 반복: 더 이상 교체가 필요하지 않을 때까지 목록을 계속 반복합니다. 이 시점에서 목록이 정렬됩니다.

버블 정렬은 이해하기 쉽지만 특히 대규모 데이터 세트의 경우 가장 효율적인 정렬 알고리즘은 아닙니다. 최악의 경우 시간 복잡도는 O(n^2)입니다. 여기서 'n'은 목록의 요소 수입니다. 이러한 2차 시간 복잡성으로 인해 고급 정렬 알고리즘과 비교할 때 대규모 데이터 세트에는 적합하지 않습니다.

버블 정렬의 Python 구현

이제 Python에서 Bubble Sort를 구현하고 샘플 목록을 사용하여 동작을 관찰해 보겠습니다.

 def bubble_sort(arr): n = len(arr) # Traverse through all array elements for i in range(n): # Last i elements are already sorted, so we don't need to check them for j in range(0, n-i-1): # Swap if the element found is greater than the next element if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] # Example usage if __name__ == '__main__': # Sample list to be sorted sample_list = [64, 34, 25, 12, 22, 11, 90] # Display the original list print('Original List:', sample_list) # Apply Bubble Sort bubble_sort(sample_list) # Display the sorted list print('Sorted List:', sample_list) 

이 구현에서 bubble_sort 함수는 목록(arr)을 매개변수로 사용하여 제자리에서 정렬합니다. 중첩 루프는 인접한 요소를 비교하여 순서가 잘못된 경우 교체합니다. 외부 루프는 전체 목록이 정렬될 때까지 프로세스가 반복되도록 합니다.

출력 및 설명

샘플 목록과 함께 제공된 Python 코드를 실행하고 출력을 관찰해 보겠습니다.

 Original List: [64, 34, 25, 12, 22, 11, 90] Sorted List: [11, 12, 22, 25, 34, 64, 90] 

여기서 원래 목록 [64, 34, 25, 12, 22, 11, 90]은 Bubble Sort 알고리즘을 사용하여 성공적으로 정렬되어 정렬된 목록 [11, 12, 22, 25, 34, 64, 90]이 생성됩니다.

tkinter 프레임

알고리즘은 전체 목록이 정렬될 때까지 요소를 비교하고 교체하면서 목록을 여러 번 반복합니다. 각 패스에서 정렬되지 않은 가장 큰 요소가 올바른 위치로 '버블링'됩니다. 이 프로세스는 더 이상 교체가 필요하지 않을 때까지 계속되며 이는 목록이 완전히 정렬되었음을 나타냅니다.

Bubble Sort는 목록을 성공적으로 정렬하지만 시간 복잡성으로 인해 Merge Sort 또는 Quick Sort와 같은 다른 정렬 알고리즘에 비해 대규모 데이터 세트의 효율성이 떨어진다는 점에 유의하는 것이 중요합니다.

버블 정렬의 시간 복잡도

Java에서 날짜 형식 지정

알고리즘의 시간 복잡도를 이해하는 것은 특히 대규모 데이터 세트를 처리할 때 효율성을 평가하는 데 중요합니다. 버블 정렬의 시간 복잡도는 최악의 경우 O(n^2)입니다. 여기서 'n'은 목록의 요소 수입니다.

시간 복잡도 분석을 분석해 보겠습니다.

  • 외부 루프는 'n' 반복 동안 실행됩니다. 여기서 'n'은 목록의 요소 수입니다.
  • 내부 루프는 최악의 경우에도 'n'번 반복 실행됩니다. 그러나 알고리즘이 진행됨에 따라 정렬되지 않은 가장 큰 요소가 각 패스의 올바른 위치에 배치되므로 내부 루프의 반복 횟수가 감소합니다.
  • 최악의 경우 비교 및 ​​교환 횟수는 목록 요소 수의 제곱에 비례하므로 O(n^2) 시간 복잡도가 발생합니다. 이로 인해 대규모 데이터세트에서는 버블 정렬이 비효율적이며, 실제 응용 프로그램에서는 시간 복잡성이 더 높은 고급 정렬 알고리즘이 선호되는 경우가 많습니다.

결론

이 기사에서는 전체 목록이 정렬될 때까지 인접한 요소를 반복적으로 비교하고 교체하는 간단한 정렬 알고리즘인 버블 정렬(Bubble Sort)의 개념을 살펴보았습니다. 우리는 Bubble Sort의 Python 구현을 제공하고 이를 샘플 목록과 함께 실행하고 출력을 분석했습니다. 또한 O(n^2) 최악의 시간 복잡도와 효율성에 미치는 영향을 강조하면서 Bubble Sort의 시간 복잡도에 대해 논의했습니다.