2014년 10월 7일 화요일

[자료구조, Java] BuubleSort

Bubble Sort(버블 정렬)
출처 : 위키백과
  • 시간복잡도 : O(n^2)
  • 인접한 두 인자(즉, 2개씩) 비교해가며 반복하여 정렬
  • 장점 : 쉬운 구현
  • 단점 : 느리다.
java 구현
 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
public class Bubble_Sort {
 //난수 생성 메소드
 public int[] make_rnd(int size){
  //중복값 제거를 위하여 Set으로 값 관리
  Set rnd = new HashSet();
  int rnd_list[] = new int[size];
  for(int i = 0;size>i;i++){
   //1~99사이의 난수값 생성
   int tmp = (int) (Math.random() * 99)+1;
   rnd.add(tmp);
   //중복값 생성시 다시 생성
   if (rnd.size() == i + 1)
    i--;
   else
    rnd_list[i]=tmp;
  }
  System.out.println("원본 배열 생성");
  array_print(rnd_list, size);
  return rnd_list;
 }
 
 //배열 출력 메소드
 public void array_print(int rnd_list[],int size){
  System.out.print("[ ");
  for(int i=0;size>i;i++){
   System.out.print(rnd_list[i]+ " ");
  }
  System.out.println("]");
 }
 
 
 public static void main(String args[]){
  int size = 10;
  Bubble_Sort sort= new Bubble_Sort();
  int rnd_list[] = sort.make_rnd(size);
  
  //버블정렬 i = 차수
  for (int i = 0; size - 1 > i; i++) {
   //j비교 위치
   for (int j = 0; size - 1 > j; j++) {
    //2개 값 비교하여 정렬
    if (rnd_list[j] > rnd_list[j + 1]) {
     int tmp = rnd_list[j + 1];
     rnd_list[j + 1] = rnd_list[j];
     rnd_list[j] = tmp;
    }
   }
   System.out.println(i+1+"차 정렬");
   sort.array_print(rnd_list, size);
  }
 }
}
 
원본 배열 생성
[ 89 31 19 63 55 59 97 5 61 94 ]
1차 정렬
[ 31 19 63 55 59 89 5 61 94 97 ]
2차 정렬
[ 19 31 55 59 63 5 61 89 94 97 ]
3차 정렬
[ 19 31 55 59 5 61 63 89 94 97 ]
4차 정렬
[ 19 31 55 5 59 61 63 89 94 97 ]
5차 정렬
[ 19 31 5 55 59 61 63 89 94 97 ]
6차 정렬
[ 19 5 31 55 59 61 63 89 94 97 ]
7차 정렬
[ 5 19 31 55 59 61 63 89 94 97 ]
8차 정렬
[ 5 19 31 55 59 61 63 89 94 97 ]
9차 정렬
[ 5 19 31 55 59 61 63 89 94 97 ]

댓글 없음:

댓글 쓰기