본문 바로가기
개발/iOS

Swift 삽입정렬, 선택정렬, 퀵 정렬

by lucidmaj7 2022. 7. 3.
728x90
반응형

 

Swift 언어에 좀 익숙해 보고자 알고리즘에서 제일 처음에 나오는 정렬 코드를 짜보았다. 간단하게 함수, 배열, 조건문, 반복문 등을 익일 수 있었다. 

1. 삽입정렬

func insertionSort(arr: inout [Int]) {
    for i in 1 ..< arr.count {
        let key = arr[i]
        var j = i
        while j > 0 && arr[j - 1] > key {
            arr.swapAt(j - 1 , j)
            j-=1
        }
        arr[j] = key
    }
    return
}

2. 선택정렬

func selectionSort(arr: inout [Int]) {

    for i in 0 ..< arr.count {
        var min = i
        for j in i ..< arr.count {
            if arr[min] > arr[j] {
                min = j
            }
        }
        arr.swapAt(min, i)
    }
    return
}

3. 퀵 정렬

func partition(arr: inout [Int], start:Int, end:Int) -> Int {
    let pivot = arr[ (start+end) / 2 ]
    var left = start
    var right = end

    while left <= right {
        while arr[left] < pivot { left += 1 }
        while arr[right] > pivot { right -= 1}
        if right >= left {
            arr.swapAt(right, left)
            left+=1
            right-=1
        }
   
    }
    return left
}

func quickSort(arr: inout [Int], start:Int, end:Int) {
    let rightPartitionStart = partition(arr: &arr, start: start, end: end)
    if start < rightPartitionStart-1 {
        quickSort(arr: &arr, start: start, end: rightPartitionStart - 1 )
    } 
    if end > rightPartitionStart {
        quickSort(arr: &arr, start: rightPartitionStart, end: end)
    } 
}

참고로 맥북이 너무느려 윈도우 환경에서 swift 코딩환경을 세팅해서 해봤는데 나름 잘 된다. 빌드하면 당연히 exe파일이 나오고, Visual Studio Code로 디버깅도 가능하다.

728x90
반응형

댓글