# 코드 및 logic
public class sort {
public static void main(String[] args) {
int[] input = { 5, 3, 2, 5, 6, 7, 1, 32, 67, 434, 995 };
print("input", input);
// 주석 단축키 ctrl + /
// selection(input);
// insertion(input);
bubble(input);
}
/**
* logic
* 1. 정렬되지 않은 인덱스의 맨 앞에서부터, 이를 포함한 그 이후의 배열값 중 가장 작은 값을 찾아간다
* (정렬되지 않은 인덱스의 맨 앞은, 초기 입력에서는 배열의 시작위치일 것이다.)
* 2. 가장 작은 값을 찾으면, 그 값을 현재 인덱스의 값과 바꿔준다.
* 3. 다음 인덱스에서 위 과정을 반복해준다.
*
*/
private static void selection(int[] input) {
for (int i = 0; i < input.length - 1; i++) {
int a = i;
for (int j = i + 1; j < input.length; j++) {
if (input[j] < input[a]) {
a = j;
}
}
int tmp = input[i];
input[i] = input[a];
input[a] = tmp;
}
print("selection", input);
}
/***
* logic
* 1. 삽입 정렬은 두 번째 인덱스부터 시작한다. 현재 인덱스는 별도의 변수에 저장해주고,
비교 인덱스를 현재 인덱스 -1로 잡는다.
* 2. 별도로 저장해 둔 삽입을 위한 변수와, 비교 인덱스의 배열 값을 비교한다.
* 3. 삽입 변수의 값이 더 작으면 현재 인덱스로 비교 인덱스의 값을 저장해주고,
비교 인덱스를 -1하여 비교를 반복한다.
* 4. 만약 삽입변수가 더 크면, 비교 인덱스 +1에 삽입 변수를 저장한다.
*
*/
private static void insertion(int[] input) {
for (int i = 1; i < input.length; i++) {
int tmp = input[i];
int index = i - 1;
while (index >= 0 && tmp < input[index]) {
int a = input[index + 1];
input[index + 1] = input[index];
input[index] = tmp;
index--;
}
}
print("insertion", input);
}
/**
* logic
* 1. 버블 정렬은 두 번째 인덱스부터 시작한다. 현재 인덱스 값과, 바로 이전의 인덱스 값을 비교한다.
* 2. 만약 이전의 인덱스가 더 크면, 현재 인덱스와 바꿔준다.
* 3. 현재 인덱스가 더 크면, 교환하지 않고 다음 두 연속된 배열값을 비교한다.
* 4. 이를 (전체 배열의 크기 - 현재까지 순환한 바퀴 수) 만큼 반복한다.
*/
private static void bubble(int[] input) {
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input.length - i - 1; j++) {
if (input[j] > input[j + 1]) {
int tmp = input[j];
input[j] = input[j + 1];
input[j + 1] = tmp;
}
}
}
print("bubble", input);
}
private static void print(String str, int[] arr) {
System.out.print(" " + str + " \n>> ");
for (int tmp : arr) {
System.out.print(tmp + " ");
}
System.out.println("\n");
}
}
728x90