Java에서 파일로 부터 데이터 읽어서 정렬(bubble sort)하기


왠지 도움이 될것 같다면 추천을 *(-_-)*


학교에서 내주는 숙제용 소스코드이다.

자바 기본 라이브러리로 있는 ArrayList 와 Collections.sort() 를 이용하면

임시 배열에 읽었다가 복사하고 꾸리한 버블정렬을 할 필요없이 간결한 코드를 맹글 수 있지만, 이건 숙제용이니깐~

그래도 약간 배울만한 점은 Scanner 클래스의 새로운 발견이랄까?

Scanner 는 주로 System.in 에서 사용자로 부터 뭔가를 입력받는 용도로 많이들 쓸 건데,

여기서는 File 에서 데이터를 읽는 용도로 썼다. InputStream 이나 Reader 계열로 뭔가를 읽는 코드보다 간결해서 좋은것 같다.

요거는 앞으로 Stream 에서 뭔가를 읽고 싶을때 어째 잘 써먹도록 해야 겠다. 




소스코드
import java.io.File;
import java.util.Scanner;

public class FileSort {
	public static void main(String[] args) throws Exception {
		Scanner scan = new Scanner(new File("c:\\numbers.dat"));

		float[] arr = new float[100];
		int cnt = 0;

		// numbers.dat 파일읽기
		while (scan.hasNext()) {
			arr[cnt++] = scan.nextFloat();
		}

		// 읽혀진 숫자 갯수만큼 배열을 생성해서 복사
		float[] numbers = new float[cnt];
		System.arraycopy(arr, 0, numbers, 0, cnt);

		// 버블정렬
		bubbleSort(numbers);

		// 배열 출력
		for (float num : numbers) {
			System.out.println(num);
		}
	}

	// 내림차순 버블 소트
	public static void bubbleSort(float[] arr) {
		int n = arr.length;
		for (int pass = 1; pass < n; pass++) {
			for (int i = 0; i < n - pass; i++) {
				if (arr[i] < arr[i + 1]) {
					float temp = arr[i];
					arr[i] = arr[i + 1];
					arr[i + 1] = temp;
				}
			}
		}
	}
}


내림차순으로 바꾸고 싶을때는 if (arr[i] < arr[i + 1]) 요기에서 요렇게 부등호 방향만 바꿔주면 된다. if (arr[i] > arr[i + 1]) {


사용된 numbers.dat 파일