티스토리 뷰
안녕하세요!!
오늘은 정말 유명한 정렬 알고리즘 selection sort를 짜볼거게요.
C++/C/Java로 짜신거는 정말 많이 보셨을 텐데요,
저는 Swift로 짜볼까 합니다 ㅎㅎ
하면서 공부가 많이 됐어요. 간단하니 계속 유명한 알고리즘들을 Swift로 짜보는 연습을 계속 해보려구요 XD
선택정렬(Selection Sort)
먼저 플레이그라운드를 열어주세요!!
먼저 C++로 짠 선택정렬 코드에요.
이제 Swift로 짠 코드를 볼까요?
import UIKit
var arr = [9,8,7,6,5,4,3,2,1]
for i in 0..<arr.count{
var minn : Int = arr[i];
var location : Int = i;
for j in i+1..<arr.count{
if(minn>arr[j])
{
minn=arr[j];
location = j;
}
}
if i != location{
swap(&arr[i],&arr[location])
}
}
for i in 0..<8{
print(arr[i])
}
자, C++과 비교해봤을 때, 거의 비슷하죠?
하나도 어렵지 않답니다 ㅎㅎ
아 이 코드를 짜면서 느낀점이 있는데, Swift가 정말 '안전'한 언어인가 보다.. 싶었어요.
일단 중괄호를 꼭 해야한다는 점.
이게 안전이랑 관계가 있나 싶지만, 음.. 저는 관련이 있다고 생각해요.
C나 C++,Java같은 언어는 코드 한줄까지는 중괄호을 사용하지 않아도 됩니다.
이 때문에 분명 같이 수행되어야 하는데, 수행되지 않는 코드가 있을 수 도 있죠.
(중괄호를 사용하지 않고 2줄 이상 썼을시)
하지만 단 한줄의 코드라도 중괄호 안에 있어야만 하는 제한이 있다면,
이런일이 발생할 일이 없겠죠?
음..그리고 정말 안전하구나;;라고 느낀 부분
좌 - swift / 우 - C++
자, 어떤 차이가 있나요? 네, 일단 &는 둘째치고.. swift는 if문으로 감싸줬죠?
왜 감싸줬을까요?
자, 일단 i와 location이 같지 않다는 것은 예외는
i와 location이 '같다'인 경우밖에 없겠죠?
이 i와 location이 언제 같아질까요? 네. 현재 i번째 값보다 모든 값들이 클때입니다.
(두번째 for문 시작전에 minn을 arr[i]로 해주고, location을 i로 해주었으므로.
만약 두번 째 for문 안에서 minn>arr[j]인 조건. 즉, minn이 더 크다는 소리는 현재 arr[i]값보다 arr[j]의 값이 더 '작다'라는 소리겠죠?
하지만 이 조건문을 한번도 안 걸릴려면 minn보다 모든 값들이 '클'경우 입니다.
그럼 최종적으로 i와 location이 같아지죠.)
아니..그걸 누가 몰라여??
왜 해줬냐구요 ㅡㅡ C++은 안해줬으면서;;
...if문으로 감싸주지 않으면 오류가 나기 때문입니다!!
그리고 이런 에러메세지를 줍니다.
fatal error: swapping a location with itself is not supported
치명적 에러 : 자기자신과 위치를 바꾸는 것은 지원되지 않습니다.
(치명적일것 까지야...)
네..에러가 나더라구요.
그래서 함수를 따로 만들어야 하나했는데,
이렇게 검사를 해주면 된다고 하네요.
컴파일러에게 확신을 주는거죠.
if i != location{
swap(&arr[i],&arr[location])
}
'Swift' 카테고리의 다른 글
Swift3 ) Swift에서 키보드 입력 받는법(user input) (7) | 2017.05.17 |
---|---|
Swift3 ) Swift로 버블정렬(Bubble Sort)짜보기 (1) | 2017.05.12 |
Swift3 ) swift3에서 나머지 구하기 / %사용하기 (0) | 2017.02.21 |
swift3 ) Optional 개념 정리 (23) | 2017.01.25 |
Swift ) Swift 기초문법2 ( CLASS / STRUCT / ENUM ) (2) | 2017.01.23 |
- swift array
- Combine
- 피아노
- 회고
- fastlane
- 스위프트 문법
- swift sort
- actor
- FLUTTER
- Xcode
- SwiftUI
- np-complete
- WWDC
- iOS delegate
- WKWebView
- github
- WidgetKit
- Swift
- swift delegate
- 제이슨 파싱
- 스위프트
- UIBezierPath
- Accessibility
- np-hard
- IOS
- Git
- ios 13
- swift 공부
- swift tutorial
- swift3
- Total
- Today
- Yesterday