삽입 정렬(Insertion Sort)
- 가장 간단한 정렬 방식으로 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬한다.
- 두 번째 키와 첫 번째 키를 비교해 순서대로 나열하고 이어서 세번째 앞의 n-1개의 키와 비교하여 알맞은 순서에 삽입하여 정렬하는 방식이다.
- 평균과 최악 모두 수행 시간 복잡도는 O(n²)이다.
데이터 : 8 5 6 2 4
1회차 : 5 8 6 2 4
2회차 : 5 6 8 2 4
3회차 : 2 5 6 8 4
4회차 : 2 4 5 6 8
public class SortExample
{
public static void main(String [] args)
{
String strQuestion = "85624";
System.out.println("결과 : " + insertionSort(strQuestion));
}
private static String insertionSort(String question)
{
char [] arrCh = question.toCharArray();
char select;
for(int i = 1; i < arrCh.length; i++)
{
System.out.print(i+"회차 : ");
System.out.println(arrCh);
select = arrCh[i];
int j = i;
while (j > 0 && select < arrCh[j-1])
{
arrCh[j] = arrCh[j-1]; // <<왼쪽으로 밀기
j--;
}
arrCh[j] = select; // 값 체인지
}
return new String(arrCh);
}
}
선택 정렬(Selection Sort)
- 선택 정렬은 n개의 레코드 중에서 최소값을 찾아 첫 번재 레코드 위치에 놓고, 나머지(n - 1)개 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하여 정렬하는 방식이다.
- 평균과 최악 모두 수행 시간 복잡도는 O(n²)이다.
데이터 : 8 5 6 2 4
1회차 : 2 5 6 8 4
2회차 : 2 4 6 8 5
3회차 : 2 4 5 8 6
4회차 : 2 4 5 6 8
public class SortExample
{
public static void main(String [] args)
{
String strQuestion = "85624";
System.out.println("결과 : " + selectionSort(strQuestion));
}
private static String selectionSort(String question)
{
char [] arrCh = question.toCharArray();
char select;
char min;
int minPos;
for (int i = 0; i<arrCh.length; i++)
{
System.out.print((i+1)+"회차 : ");
System.out.println(arrCh);
min = 0;
minPos = -1;
select = arrCh[i];
for (int j = i; j < arrCh.length; j++)
{
if (j == i)
{
min = arrCh[j];
minPos = j;
} else {
if (min > arrCh[j])
{
min = arrCh[j];
minPos = j;
}
}
}
if (select > min)
{
arrCh[minPos] = select;
arrCh[i] = min;
}
}
return new String(arrCh);
}
}
버블 정렬(Bubble Sort)
- 버블 정렬은 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 방식이다.
- 계속 정렬 여부를 플래그 비트로 결정한다.
- 평균과 최악 모두 수행 시간 복잡도는 O(n²)이다.
데이터 : 8 5 6 2 4
1회차 : 8 5 6 2 4 - 5 8 6 2 4 - 5 6 8 2 4 - 5 6 2 8 4 - 5 6 2 4 8
2회차 : 5 6 2 4 8 - 5 6 2 4 8 - 5 2 6 4 8 - 5 2 4 6 8
3회차 : 5 2 4 6 8 - 2 5 4 6 8 - 2 4 5 6 8
4회차 : 2 4 5 6 8 - 2 4 5 6 8
public class SortExample
{
public static void main(String[] args)
{
String strQuestion = "85624";
System.out.println("결과 : " + bubbleSort(strQuestion));
}
private static String bubbleSort(String question)
{
char [] arrCh = question.toCharArray();
int count = 1;
int i = arrCh.length-1;
while(i > 0)
{
System.out.print(count+"회차 : ");
System.out.println(arrCh);
for (int j = 0; j < i; j++)
{
char select = arrCh[j];
if (select > arrCh[j+1])
{
arrCh[j] = arrCh[j+1];
arrCh[j+1] = select;
}
}
i--;
count++;
}
return new String(arrCh);
}
}
전체 코드 : https://github.com/hinos-repo/Algorithm/blob/master/Java/Algorithm/src/sort/SortExample.java
'CS > Algorithm' 카테고리의 다른 글
뉴스 클러스터링 (0) | 2021.04.29 |
---|---|
크레인 인형뽑기 게임 (0) | 2021.04.29 |
탐색 알고리즘 (DFS) (0) | 2020.12.22 |
왕실의 나이트 (0) | 2020.12.21 |
파이썬 실수형 변수가 정수형인지 실수형인지 확인 (0) | 2020.12.19 |