티스토리 뷰

[문제]

위 그림은 {5,2,4,6,1,3} 이라는 배열을 소트하는 방법을 보여준다.

  1. 배열의 두번째 인덱스부터 시작하여 시작한 인덱스(검정색 블록) 좌측의 항목 중 자신이 들어가야 할 위치를 판단(소트되도록)하여 이동 한다.
  2. 좌측의 배열 요소들은 본인보다 좌측에 값이 삽입되어 들어올 경우 한칸씩 우측으로 이동한다. 단, 삽입되어 들어오는 요소(그림에서 검정색 블록)가 있던 인덱스(원래의 위치)까지만 이동한다.
  3. 마지막 인덱스까지 위 과정을 반복한다.

이와 같은 기능을 하는 소트 프로그램을 작성하시오.

[소스]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package InsertionSort;
 
 
public class main_mh {
 
 
    public static void main(String[] args) {
 
 
        int[] numArr = { 524613 };
        int numTmp = 0, idxTmp = 0;
        
        for ( int i = 1; i < numArr.length; i++ ) {
            
            for ( int j = i-1; j >= 0; j-- ) {
                
                if ( numArr[j] < numArr[i] ) {
                    numTmp = numArr[j+1];
                    idxTmp = j+1;
                    numArr[idxTmp] = numArr[i];
                    break;
                    
                } else if ( j == 0 && numArr[j] > numArr[i] ) {
                    
                    numTmp = numArr[j];
                    idxTmp = j;
                    numArr[idxTmp] = numArr[i];
                }
            }
            
            for ( int j = i; j > idxTmp; j-- ) {
                
                if ( j-1 == idxTmp ) {
                    numArr[j] = numTmp;
                    
                } else {
                    numArr[j] = numArr[j-1];
                }
            }
        }
        
        for ( int num : numArr ) {
            System.out.print(num + " ");
        }
    }
}
cs

[결과]


※ 출처http://codingdojang.com/scode/443?answer_mode=hide

'알고리즘' 카테고리의 다른 글

[코딩도장] 문자열 짝수 번째 치환  (0) 2016.10.28
[코딩도장] Cycle 최대 길이  (0) 2016.10.27
[코딩도장] 문자열 압축  (0) 2016.10.27
[코딩도장] Spiral Array  (0) 2016.10.26
[코딩도장] 숫자 개수 카운트  (0) 2016.10.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함