- 배열 데이터를 순서대로 보여주고 싶을 수도 있습니다.
- 그럴 때 사용하는 것이 정렬입니다.
- 정렬하는 방법은 매우 많지만, 하나만 예시로 들어 sort() 메서드를 쓰면 얼마나 편하지 보겠습니다.
- 일단 오름차순은 1-9, A-Z, ㄱ-ㅎ으로 처리가 되는 것을 말합니다.
- 반대로, 내림차순은 9-1, Z-A, ㅎ-ㄱ으로 처리가 되는 것을 말합니다.
1. 버블정렬
- 버블정렬은 인접해있는 값을 비교해서 정렬하는 방식입니다.
- 이 방법을 꼭 알 필요는 없습니다.
- 수많은 정렬방법 중 하나를 파악해 보고, sort를 통해 쉽게 하는 것을 보려고 합니다.
- 그림으로 보자면 이렇게 정렬한다고 볼 수 있습니다.
- 단순하기는 하지만 시간이 매우 많이 걸립니다.
- 전체적인 흐름을 애니메이션으로 보면 이렇게 처리가 됩니다.
## 버블 정렬 코드 - Ex12_ArrayBubbleSort.java
package ch18_array;
public class Ex12_ArrayBubbleSort {
public static void main(String[] args) {
//배열 선언
int[] nums = new int[] {8,3,7,5,4,2};
//원래 배열 확인
System.out.print("원래 배열 : ");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i] + " ");
}
//마지막 값 뒤에는 숫자가 없으므로 전번째까지만 확인하면 됨
for(int i=0;i<nums.length-1;i++) {
for(int j=0;j<nums.length-1;j++) {
if(nums[j] > nums[j+1]) {
//두개의 위치를 바꾸기 위해 새로운 변수를 선언해야 함
//b=a, a=b 이렇게 해버리면 두개의 값이 바뀌는 것이 아니라 두 변수가 같은 값으로 통일되버림
//c=a, a=b, b=c 이렇게 해줘야 a와 b가 값이 변경됨
int tmp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = tmp;
}
}
}
System.out.println();
//정렬이 잘되었는지 확인
System.out.print("버블정렬처리 : ");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i] + " ");
}
}
}
- 설명은 주석에 달아뒀습니다.
- 반복문을 통해 2개의 값을 비교해서 위치를 변경하는 예제였습니다.
- 이건 외울 필요는 없습니다. 이렇게 가능하다고만 보면 됩니다.
- 하지만 버블정렬을 하려면 코드가 많이 길어지죠?
- 그래서 간단하게 Arrays가 내장하고 있는 sort메서드를 사용하면 됩니다.
## 버블 정렬 결과 - Ex12_ArrayBubbleSort.java
- 그럼 버블정렬을 통해 오름차순으로 잘 처리가 되는 것이 확인됩니다.
2. Arrays.sort()
- 자바가 내장하고 있는 Arrays 클래스의 sort() 메서드를 사용하면 정렬할 수 있습니다.
- 원래는 오름차순으로만 정렬가능하나, 또 다른 클래스 객체를 참조하면 내림차순도 할 수 있습니다.
1) 오름차순 처리
- 그럼 먼저 오름차순으로 정렬을 해보겠습니다.
## sort() 오름차순 코드 - Ex13_ArraySort1.java
package ch18_array;
import java.util.Arrays;
public class Ex13_ArraySort1 {
public static void main(String[] args) {
//배열 선언
int[] nums = new int[] {8,3,7,5,4,2};
//원래 배열 확인
System.out.print("원래 배열 : ");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i] + " ");
}
//오름차순 정렬
Arrays.sort(nums);
System.out.println();
//정렬이 잘되었는지 확인
System.out.print("오름차순처리 : ");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i] + " ");
}
}
}
- 위에서 반복문을 했던 부분이 [ Arrays.sort(nums); ] 로 간결해진 것이 확인됩니다.
- 그리고 Arrays를 불러오면서 상단에 [ import java.util.Arrays; ] 불러와진 것을 확인할 수 있습니다.
- 코드가 이렇게 간결한데, 버블정렬을 쓸 일이 없겠죠?
## sort() 오름차순 결과 - Ex13_ArraySort1.java
- 오름차순으로 잘 정리되는 것이 확인됩니다.
2) 내림차순 처리
- 그럼 내림차순으로 정렬을 해보겠습니다.
- 내림차순으로는 그냥되지는 않습니다.
- 많은 방법이 있지만, 그것들은 추후에 해당 기능을 배워서 처리해 볼 겁니다.
- int가 아닌 컬렉션을 사용한 Integer[]로 클래스객체화해야 합니다.
- sort()의 인자에 추가로 Collections.reverseOrder()를 전달해야 합니다.
- Collections.reverseOrder()는 Comparator 객체이며, 역순으로 정렬해 줍니다.
- 이 부분들을 그냥 가능하다로만 보고 추후에 컬렉션을 더 상세히 배우겠습니다.
## sort() 오름차순 코드 - Ex13_ArraySort2.java
package ch18_array;
import java.util.Arrays;
import java.util.Collections;
public class Ex13_ArraySort2 {
public static void main(String[] args) {
//배열 선언
Integer[] nums = {8,3,7,5,4,2};
//원래 배열 확인
System.out.print("원래 배열 : ");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i] + " ");
}
//오름차순 정렬
Arrays.sort(nums, Collections.reverseOrder());
System.out.println();
//정렬이 잘되었는지 확인
System.out.print("내림차순처리 : ");
for(int i=0;i<nums.length;i++) {
System.out.print(nums[i] + " ");
}
}
}
- 바뀐 부분만 체크해 보겠습니다.
## sort() 오름차순 결과 - Ex13_ArraySort2.java
- 그럼 내림차순으로 처리된 것을 확인할 수 있습니다.
'컴퓨터언어 > JAVA(자바)' 카테고리의 다른 글
[JAVA강좌] 32강 자바 배열 - 배스킨라빈스31게임 (0) | 2024.01.29 |
---|---|
[JAVA강좌] 31강 자바 배열 - 로또 프로그램 (1) | 2024.01.29 |
[JAVA강좌] 29강 배열 복사하기 (0) | 2024.01.26 |
[JAVA강좌] 28강 객체 배열 생성 (0) | 2024.01.26 |
[JAVA강좌] 27강 향상된 for문과 배열 (0) | 2024.01.26 |