안녕하세요
오늘은 오름차순 내림차순으로 정렬하는 버블소팅에 대해 배워보겠습니다.
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
|
import java.util.Arrays;
public class SortEx {
public static void main(String[] args) {
//버블 소팅(정렬), 선택정렬과 유사하다
// 개념: 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘
// 인접한 2개의 값을 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환한다.
// 버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세번째 자료를....
// 이런식으로 (마지막 -1)번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬한다.
int[] score = new int[5];
for (int i = 0; i < score.length; i++) {
score[i] = (int)(Math.random()*45 +1);
}
System.out.print("정렬 전: ");
System.out.println(Arrays.toString(score));
//정렬하는 코드
System.out.println("--------------------");
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score.length-1; j++) {
//값을 바꾸는 코드
if (score[j]> score[j+1]) {//오름차순 , 내림차순으로 바꾸고 싶으면 부등호 바꾸면 됨
int temp = score[j];
score[j] = score[j+1];
score[j+1] = temp;
}
}
System.out.println(Arrays.toString(score));
}
//Arrays.sort(score);
System.out.println("--------------------");
System.out.print("정렬 후: ");
System.out.println(Arrays.toString(score));
//단순하지만 비효율적인 정렬방법 : 버블정렬, 선택정렬, 삽입정렬
//복잡하지만 효율적인 정렬방법 : 퀵정렬, 힙정렬, 합병정렬, 쉘정렬
}
}
|
cs |
하나씩 살펴보겠습니다.
int배열 score에 5개의 방을 만들었습니다.
그리고 for문을 통해서 1~45까지의 난수를 발생시켜
랜덤으로 값을 집어넣고 있습니다.
Arrays.toString을 하면 배열이 보기좋게 출력이 됩니다.
이것이 바로 이번에 살펴볼 정렬 코드입니다.
for문은 이중으로 돌려야하구요
첫번째 for문은 배열의 길이만큼
두번째 for문은 배열길이 -1 만큼 돌려야합니다.
만약에 배열이 [34, 5, 4, 44, 3] 이렇게 나왔다고 치면
if문 부터 보겠습니다.
score[0] 이 score[1]보다 크면
temp에 score[0]값을 넣고
score[0]에 score[1]값을 넣고
scroe[1]에 temp값을 넣어라(score[0]을 temp가 가지고 있으니 score[0]을 넣으라는 말과 동일)
결국에 score[0]이 score[1]보다 크면 둘이 순서 바꿔라는 뜻이죠
그니까 처음 안의 for문을 시행하면
[5, 34, 4, 44, 3]
이 되겠구요
j가 1이 되면
socre[1]이랑 score[2]랑 비교해서 바꾸니까
[5, 4, 34, 44, 3]
이 되고
j가 2이면 score[2]랑 score[3]이랑 비교하니
[5, 4, 34, 44, 3]
j가 3이면 score[3]이랑 score[4]랑 비교하니
[5, 4, 34, 3, 44]
이렇게 되고
j는 4가 되면
score[4]랑 score[5]랑 비교해야하는데
score는 길이 5라서 score[5]인덱스가 없죠!
그러니까 안의 for문은 score길이 -1만큼 돌리는 것입니다.
그래서 전체 for문을 돌리다 보면
큰 값이 오른쪽으로 정렬이 됩니다.
이렇게 정렬 되었습니다.
내림차순으로 정렬하고 싶다면
if문에서 부등호를 < 이걸로 바꿔주면 끝이겠네요!
'JAVA > java 실습' 카테고리의 다른 글
[자바JAVA] 이차원 배열 , 점수 총점 평균을 표처럼 나타내기 (0) | 2020.10.06 |
---|---|
[자바JAVA] 일차원배열 - 향상된 for문, 배열에서 값 하나씩 가져오기 (0) | 2020.09.29 |
[자바JAVA] 일차원 배열 - 배열 복사방법 for문, arraycopy, Arrays.copyOf, Arrays.copyOfRange (0) | 2020.09.28 |
[자바JAVA] 1차원 배열 - String배열 (2차원배열과 동일) (0) | 2020.09.27 |
[자바JAVA] 일차원배열 - 배열대로 출력하는 법 Arrays.toString, 배열의 주소값출력 (0) | 2020.09.27 |