책을 보다 보니까 약간 특이한 형태의 for문이 있었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | void insertion(int a[]) { int i, j; for (i = 1; i < a.Length; i++) { int tmp = a[i]; for (j = i; j > 0 && a[j - 1] > tmp; j--) { a[j] = a[j - 1]; } a[j] = tmp; } } | cs |
요것이다.
간단한 삽입 정렬 코드 인데
일반적으로 사용하는 for문과는 약간 생김새가 다르다.
1. i,j변수를 외부에 선언했다
2.두번째 for문에서 가운데 반복 조건 처리를 j>0 && a[j-1]>tmp 이렇게 두가지를 했다.
흠. 위에 코드는 어떻게 보면 깔끔하고 세련됐다고 볼 수도 있겠지만,
가독성 면에서는 불편하다는 생각이 들었다. 특히 두번째 포문의 탈출조건.
충분히 안쪽에서 포문을 나가게 할 수 있는데 굳이 저렇게 조건을 중첩 시켜야 했나 싶다.
밑에 코드는 내가 다시 작성해본 코드인데 위에 코드와 결과가 같다.
반복 횟수를 카운트 해봤는데 반복 횟수 또한 같았다.
(i++,j--뒤에 count변수를 넣어서 테스트 해봤다.)
내 기준으로는 밑에 코드가 조금 더 이해 하기 쉽다고 생각하는데
혹시라도 내가 놓친 부분이 있거나, 틀린 생각을 하고 있는 것인지 다른 사람들 의견을 들어보면 좋을것 같다.
일단 새벽에 뻘짓 하지 말고 잠이나 자야 겠다. .zZ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | void myInsertion(int[] a) { for (int i = 1; i < a.Length; i++) { for(int j = i; j > 0; j--) { if (a[j - 1] > a[j]) { int temp = a[j - 1]; a[j - 1] = a[j]; a[j] = temp; } else break; } } } | cs |
'프로그래밍 > 기타' 카테고리의 다른 글
vs 단축키 (0) | 2018.12.14 |
---|---|
unity svn ignore (0) | 2018.05.20 |
IOS cocoapods (0) | 2018.05.12 |
Visualgo (0) | 2018.03.26 |
정렬알고리즘 속도 비교 (0) | 2018.03.15 |