정렬 알고리즘은 많이 공부해 봤으니 간단하게만 설명하겠습니다.
선택 정렬 : 기준위치에 맞는 원소를 선택하여 자리를 교환하는 방식
버블 정렬 : 양옆의 값을 비교해서 하나씩 옆으로 밀어내면서 진행
삽입 정렬 : 정렬되어 있는 부분집합에 새로운 원소의 위치를 찾아 삽입하는 정렬
선택 정렬
public String solution(int[] numbers) {
String answer = "";
for(int i=0; i<numbers.length-1; i++) {
int min = i;
for(int j=i+1; j<numbers.length; j++) {
if(numbers[j] < numbers[min]) { //오름차순
min = j;
}
}
swap(numbers, min, i);
System.out.print("선택 정렬 "+ (i+1) +" 단계 : ");
for(int v : numbers) {
System.out.print(" " + v);
}
System.out.println();
}
return answer;
}
public void swap(int a[], int idx1, int idx2) {
int temp = a[idx1];
a[idx1] = a[idx2];
a[idx2] = temp;
}
public static void main(String[] args) {
int [] numbers = {3, 30, 34, 5, 9};
Sort_02 s2 = new Sort_02();
System.out.println(s2.solution(numbers));
}
결과
버블정렬
public String solution(int[] numbers) {
String answer = "";
int size = numbers.length;
for(int i=size-1; i>0; i--) {
System.out.print("버블 정렬"+ (size-i) + " 단계 : ");
for(int j=0; j<i; j++) {
if(numbers[j] > numbers[j+1]) {
swap(numbers,j,j+1);
}
System.out.println();
for(int v : numbers) {
System.out.print(" "+ v);
}
}
System.out.println();
}
return answer;
}
public void swap(int a[], int idx1, int idx2) {
int temp = a[idx1];
a[idx1] = a[idx2];
a[idx2] = temp;
}
public static void main(String[] args) {
int [] numbers = {3, 30, 34, 5, 9};
Sort_02 s2 = new Sort_02();
System.out.println(s2.solution(numbers));
}
결과창
삽입정렬
public String solution(int[] numbers) {
String answer = "";
int size = numbers.length;
for(int i=1; i<size; i++) {
int temp = numbers[i];
int j = i;
while((j>0) && (numbers[j-1]>temp)) {
numbers[j] = numbers[j-1];
j--;
}
numbers[j] = temp;
System.out.print("삽입정렬 " + i + "단계 : ");
for(int v : numbers) {
System.out.print(" " + v);
}
System.out.println();
}
return answer;
}
public void swap(int a[], int idx1, int idx2) {
int temp = a[idx1];
a[idx1] = a[idx2];
a[idx2] = temp;
}
public static void main(String[] args) {
int [] numbers = {3, 30, 34, 5, 9};
Sort_02 s2 = new Sort_02();
System.out.println(s2.solution(numbers));
}
결과창
'알고리즘 && 자료구조' 카테고리의 다른 글
자바 - DFS(Depth First Search) 구현 (2) | 2020.04.21 |
---|---|
프로그래머스 42839번 (순열 문제) (0) | 2020.03.01 |
프로그래머스(정렬)-k번째 풀이 (0) | 2020.01.25 |
PriorityQueue(우선순위 큐) 알고리즘 파버리기 (0) | 2020.01.22 |
Queue를 이용한 문제 (0) | 2020.01.15 |