관리 메뉴

공부한것들을 정리하는 블로그 입니다.

[Java] 기본 정렬 알고리즘 - 버블정렬, 선택정렬, 삽입정렬 본문

알고리즘

[Java] 기본 정렬 알고리즘 - 버블정렬, 선택정렬, 삽입정렬

호 두 2017. 5. 13. 19:02
반응형

 

[참고] 관련포스트

 

[Java] 기초알고리즘 - 00. 버블정렬(Bubble Sort) : http://javaking75.blog.me/140186094683

[Java] 기초알고리즘 - 09. 선택정렬(SelectionSort) 알고리즘 : http://javaking75.blog.me/140176253632

[Java] 기초알고리즘 - 00. 삽입정렬 (Insertion Sort) : http://javaking75.blog.me/140187255750

 

[javascript] 배열 - Array 객체 - 버블정렬(Bubble Sort) 알고리즘 예제 : http://javaking75.blog.me/140183503202

[javascript] 배열 - Array 객체 - 선택정렬(Selection Sort) 알고리즘 예제 : http://javaking75.blog.me/140161106525

[Javascript] 기본 정렬 알고리즘 - 버블정렬, 선택정렬, 삽입정렬 : http://javaking75.blog.me/220300110137

 

 [코드]


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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import java.util.Arrays;


public class SortExam15 {
    
    public static void main(String[] args) {
        
        //[선택정렬] 테스트
        System.out.println("=====[선택정렬]=====");
        int a[] = {68, 9, 32, 2, 14, 7, 31, 26};        
        Sort s = new Sort();
        System.out.printf("\n정렬할 원소 :");
        for(int v : a) {
            System.out.printf("%3d ", v);
        }
        System.out.println();
        s.selectionSort(a);
        
        
        //[버블정렬] 테스트            
        System.out.println();
        System.out.println("=====[버블정렬]=====");
        int b[] = {68, 9, 32, 2, 14, 7, 31, 26};
        System.out.printf("\n정렬할 원소 :");
        for(int v : b) {
            System.out.printf("%3d ", v);
        }
        System.out.println();
        s.bubbleSort(b);
        
        
        //[삽입정렬] 테스트            
        System.out.println();
        System.out.println("=====[삽입정렬]=====");
        int c[] = {68, 9, 32, 2, 14, 7, 31, 26};
        System.out.printf("\n정렬할 원소 :");
        for(int v : c) {
            System.out.printf("%3d ", v);
        }
        System.out.println();
        s.insortionSort(c);;
    }

    
}

class Sort {
    
    
    /**
     * 선택 정렬(Selection Sort)은 
     * 전체 원소들 중에서 기준위치에 맞는 원소를 선택하여 자리를 교환하는 방식으로 정렬 
     * 
     * @param a
     */

    public void selectionSort(int a[]) {
        
        for(int i=0; i<a.length-1; i++) {
            int min = i;
            for(int j=i+1; j<a.length; j++) { 
                if(a[j] < a[min]) { //오름차순 
                    min = j;
                }
            }
            swap(a, min, i); 
            System.out.printf("\n선택 정렬 %d 단계 : ", i+1);
            for(int v : a) {
                System.out.printf("%3d ", v);
            }
            //System.out.println(Arrays.toString(a));            
        }
        System.out.println();
    }
    
    /**
     * 버블 정렬(Bubble Sort)은 인접한 두개의 원소를 비교하여 자리를 교환하는 방식으로 정렬
     * 첫번째 원소부터 인접한 원소끼리 계속 자리를 교환하면서 맨 마지막자리로 이동하는 모습이
     * 물속에서 물 위로 올라오는 물방울 모양과 같다고 해서 버블 정렬이라고 한다.
     */

    public void bubbleSort(int a[]) {
        int size = a.length;
        for(int i=size-1; i>0; i--) {
            System.out.printf("\n버블 정렬 %d 단계 : ", size-i);
            for(int j=0; j<i; j++) {
                if(a[j] > a[j+1]) {
                    swap(a,j,j+1);
                }
                System.out.printf("\n\t");
                for(int v : a) {
                    System.out.printf("%3d ", v);
                }
            }            
        }
        System.out.println();
    }
    
    /**
     * 삽입 정렬(Insert Sort)은 정렬되어 있는 부분집합에 새로운 원소의 위치를 찾아 삽입하는 정렬방식
     *                          S(Sorted)와 U(Unsorted) 
     * @param a
     */

    public void insortionSort(int a[]) {
        int size = a.length;        
        for(int i=1; i<size; i++) {
            int temp = a[i];
            int j = i;
            while((j>0) && (a[j-1]>temp)) {
                a[j] = a[j-1];
                j--;
            }
            
            a[j] = temp;
            System.out.printf("\n삽입정렬 %d 단계 : ",i);
            for(int v : a) {
                System.out.printf("%3d ", v);
            }            
        }
        System.out.println();
    }
    
    public  void swap(int a[], int idx1, int idx2) {
        int temp = a[idx1];
        a[idx1] = a[idx2];
        a[idx2] = temp;
    }    
    
}
 

  

 

 

출처 : http://blog.naver.com/PostList.nhn?blogId=javaking75&from=postList&categoryNo=71

반응형

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

삽입정렬  (0) 2017.05.13
Comments