본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 30강 배열 정렬 - sort()

728x90
반응형

 

 

 

 

 

 

- 배열 데이터를 순서대로 보여주고 싶을 수도 있습니다.

- 그럴 때 사용하는 것이 정렬입니다.

- 정렬하는 방법은 매우 많지만, 하나만 예시로 들어 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

- 그럼 버블정렬을 통해 오름차순으로 잘 처리가 되는 것이 확인됩니다. 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

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

- 그럼 내림차순으로 처리된 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형