프로그래밍/기타2018. 3. 15. 06:42

책을 보다 보니까 약간 특이한 형태의 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
Posted by JinFluenza