선택 정렬(Selection Sort) : 선택 정렬은 기준 값의 오른쪽에 위치한 값들 중 최솟값을 찾아, 기준 값과 최솟값을 swap하는 방식의 정렬이다. 맨 끝 값은 기준 값으로 잡지 않는다. 즉, 배열의 [0] 값부터 끝에서 두 번째 값까지를 기준 값으로 잡는다. 일반적으로 시간복잡도는 O(n²)이다. import java.io.*; public class Main { static void SelectionSort(int[] arr, int cur, int last) { int smallest = cur; // 기준 값의 오른쪽 값들 중 최솟값 찾기 for(int walker=cur+1; walker
삽입 정렬(Insertion Sort) : 삽입정렬은 현재 가리키는 값을 기준으로 앞에 있는 값들과 한 칸씩 크기 비교를 하여 알맞은 위치에 해당 값을 삽입하는 정렬 방식이다. 첫 번째 특징으로는 배열의 [0]은 비워 둔다. 그러므로 정렬할 값들은 배열의 [1]에서부터 저장한다. 두 번째 특징으로는 두 번째 값부터 기준으로 잡아 정렬을 한다. [1]에서부터 저장했으므로 [2]값부터 기준으로 잡는다. 일반적으로 시간복잡도는 O(n²)이다. import java.io.*; public class temp { static void InsertionSort(int[] arr, int n) { int temp=0; for(int i=2; i temp) {// 기준 값이 들어갈 위치를 찾음 arr[j+1] = ar..
[직렬화] : 객체를 스트림(=연속적인 데이터)으로 만드는 것 객체의 모든 인스턴스 변수들의 값을 일렬로 나열하는 것 => 객체의 내용을 저장했다가 꺼내 쓸 수 있도록 하기 위함 객체를 저장하기 위해서는 객체를 직렬화해야 한다. -> 객체를 저장하는 것과 객체를 직렬화하는 것은 같은 의미로 볼 수 있다. 객체를 저장하기 위한 파일의 확장자명은 주로 .ser를 사용한다. 직렬화 : ObjectOutputStream 객체의 writeObject() 메소드를 이용 역직렬화 : ObjectInputStream 객체의 readObject() 메소드를 이용, 이 때 반환타입은 Object이므로 본래 객체 타입으로 형변환 해주어야 함 자동 직렬화/역직렬화 메소드 : defaultWriteObject() / defau..
1. 좀 더 쉬운 버전 public class MergeSort { static void merge(int arr[], int first, int last) { int sort[] = new int[arr.length];// arr의 값들을 정렬하여 저장할 배열 생성 int mid = (first + last) / 2; int leftidx = first;// arr의 왼쪽 부분을 움직이는 index int rightidx = mid + 1;// arr의 오른쪽 부분을 움직이는 index int sortidx = first;// sort 배열의 index System.out.println("merge() 실행 - first:"+first+", last:"+last); while (leftidx
[문자 스트림] : 유니코드 문자를 입출력하는 스트림 -> 이미지, 동영상과 같은 바이너리 데이터는 입출력 불가능 Reader / Writer : 문자 스트림을 다루는 모든 클래스의 부모 클래스 추상 클래스 InputStreamReader / OutputStreamWriter : 문자 스트림과 바이트 스트림을 연결시켜주는 역할을 함 InputStreamReader : 바이트를 읽어 문자로 인코딩하여 입력 OutputStreamWriter : 문자를 바이트로 디코딩하여 출력 텍스트 파일의 인코딩 형식이 ANSI이면 한글을 잘 읽어오지만, 인코딩 형식이 UTF-8/유니코드 이면 글자가 깨져서 출력된다. -> 문자 스트림을 이용해 해결! ex) UTF-8 형식의 텍스트 파일 내용 출력하기 package Str..
[File 클래스] : 파일을 관리하는 클래스 (java.io.File) 생성자 설명 File(File parent, String child) parent 디렉토리에 child 이름의 디렉토리나 파일을 나타내는 File 객체 생성 File(String parent, String child) parent 디렉토리에 child 이름의 디렉토리나 파일을 나타내는 File 객체 생성 File(String pathname) pathname이 나타내는 File 객체 생성 File(URI uri) file:URI를 추상 경로명으로 변환하여 File 객체 생성 File 생성자를 통해 File 객체를 만들었을 때, 인스턴스가 생성된 것 뿐이지 실제로 그 파일이 만들어지진 않는다. -> exists() / isFile()..
[BufferedInputStream / BufferedOutputStream] 스트림 내에 버퍼가 존재하기 때문에 byte형 배열 buffer를 만들 필요가 없다! 버퍼의 기본 크기는 512 byte이다. 데이터 소스와 직접 연결할 수 없기 때문에 노드 스트림(->System.in) 이 필요하다. 버퍼 내 데이터가 다 차면 데이터를 한번에 읽어와 출력하는데, 버퍼가 가득 차지 않았다면 flush 메소드를 이용해 출력해준다. ex) package StreamEx; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; public class BufferIOStream { publi..
[ByteArrayInputStream / ByteArrayOutputStream] ex) package StreamEx; import java.io.*; public class ByteArrayIOTest { public static void main(String[] args) throws IOException { FileInputStream fin = new FileInputStream("Test.txt"); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] outArr = null; byte[] buffer = new byte[1024]; int n; while((n=fin.read(buffer)) != -1) {// fin으로부터 ..