문제 설명
주어진 정수 배열을 오름차순으로 정렬하는 버블 소트 알고리즘을 구현하시오.
버블 소트는 인접한 두 요소를 비교하여 정렬하는 방식으로 작동합니다.
배열의 모든 요소를 반복하여, 각 요소와 그다음 요소를 비교하고
큰 값을 뒤로 보내는 과정을 반복합니다. 이 과정은 배열이 정렬될 때까지 계속됩니다.
예제 입력 및 출력
입력
[64, 34, 25, 12, 22, 11, 90]
출력
[11, 12, 22, 25, 34, 64, 90]
버블 소트 알고리즘
알고리즘 단계
1. 주어진 배열의 길이를 n이라 할 때, n-1회 반복합니다.
2. 각 반복마다 인접한 두 요소를 비교합니다.
3. 만약 현재 요소가 다음 요소보다 크다면, 두 요소의 위치를 Swap합니다.
4. 모든 요소를 비교한 후, 배열의 마지막 부분에 가장 큰 수가 위치하게 됩니다.
5. 배열이 정렬이 완료될 때까지 이 과정을 반복합니다.
스위프트 코드 구현
func bubbleSort(array: inout [Int]) {
let n = array.count
for i in 0.. array[j+1] {
// Swap
let temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
}
}
}
}
var arr = [64, 34, 25, 12, 22, 11, 90]
bubbleSort(array: &arr)
print("정렬된 배열: \(arr)")
코드 설명
위 코드에서 bubbleSort
함수는 인자로 전달된 배열을 정렬합니다.
inout
키워드는 함수 내에서 배열을 직접 수정할 수 있게 해주며,
for
루프는 배열의 모든 요소를 반복합니다. 각 내부 루프에서는
인접한 두 수를 비교하여 순서를 변경합니다.
효율성 분석
버블 소트 알고리즘의 시간 복잡도는 최악의 경우 O(n^2)입니다.
이는 중첩된 반복문에서 발생하며, 공간 복잡도는 O(1)로 상수 공간만을 사용합니다.
따라서, 큰 데이터셋에 대해서는 비효율적일 수 있습니다.
그러나 버블 소트는 구현이 간단하고 이해하기 쉬워 교육 목적으로 많이 사용됩니다.
기대 효과
버블 소트를 통해 학생들은 배열과 반복문, 조건문 등의 기본 개념을
익힐 수 있습니다. 이 알고리즘은 다른 정렬 알고리즘의 기초적인 이해를 위한
좋은 출발점이 되며, 나아가 더 복잡한 자료구조와 알고리즘을 배울 때
기초 지식으로 활용될 수 있습니다.
마무리
이번 강좌에서는 스위프트로 버블 소트 알고리즘을 구현하는 방법에 대해
알아보았습니다. 간단한 알고리즘이지만, 프로그래밍의 기본 개념을
학습하는 데 중요한 역할을 합니다. 다음 강좌에서는 좀 더 효율적인
정렬 알고리즘에 대해 알아보겠습니다.