티스토리 뷰
Selection Sort (선택 정렬)
0번째 자리와 '1번째-N-1번째 중에서 가장 작은 값'을 교환,
1번째 자리와 '2번째-N-1번째 중에서 가장 작은 값'을 교환,
...
- 평균/최악 시간 복잡도 : O(n2)
import java.lang.Math;
import java.util.Scanner;;
public class Test {
public static void printArray(int[] arr) {
for(int i=0; i<arr.length; i++) {
System.out.printf("%2d ", arr[i]);
}
System.out.println();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = (int) (Math.random() * 100);
}
System.out.print("before Sort: ");
printArray(arr);
selectionSort(arr, n);
System.out.print("after Sort: ");
printArray(arr);
}
public static void selectionSort(int[] arr, int size) {
for(int i=0; i<size; i++) {
int minIndex = i;
for(int k=i+1; k<size; k++) {
if(arr[k] < arr[minIndex])
minIndex = k;
}
int tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
printArray(arr);
}
}
}
Insertion Sort (삽입 정렬)
왼쪽을 정렬된 영역으로, 앞에서부터 차례대로 원소를 정렬된 영역의 적절한 위치에 끼워넣는다.
- 시간 복잡도 : O(n2)
public static void insertionSort(int[] arr, int size) {
for(int i=0; i<size; i++) {
int tmp = arr[i];
int j = i-1;
for(; j>=0; j--) {
if(arr[j] < tmp)
break;
arr[j+1] = arr[j];
//printArray(arr);
}
arr[j+1] = tmp;
printArray(arr);
}
}
두번째는 주석해제시 (과정 추가출력)
Bubble Sort (버블 정렬)
앞에서부터 차례대로 인접한 두 원소를 비교, 교환한다.
한 과정을 마치면 맨뒤의 원소에 가장 큰 값이 위치한다.
범위를 줄여가며 이러한 과정을 반복한다.
- 시간 복잡도 : O(n2)
public static void bubbleSort(int[] arr, int size) {
for(int i=size-1; i>=0; i--) {
for(int k=0; k<i; k++) {
if(arr[k] > arr[k+1]) {
int tmp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = tmp;
printArray(arr);
}
}
}
}
참고할만한 자료
'Algorithm' 카테고리의 다른 글
알고리즘) Shell/Radix Sort (셸/기수 정렬) (0) | 2019.09.12 |
---|---|
알고리즘) Quick/Merge Sort (퀵/병합 정렬) (0) | 2019.09.12 |
알고리즘) Sieve of of Eratosthenes (에라토스테네스의 체) (0) | 2019.09.12 |
알고리즘) Linear/Binary Search (선형/이진 검색) (0) | 2019.09.12 |
알고리즘) Fibonacci (피보나치) (0) | 2019.09.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- git
- JPA
- 회고
- Stack
- Vo
- brute-force
- FRAGMENT
- mysql
- webhacking.kr
- bfs
- sort
- Android Studio
- 우아한 테크코스
- Java
- 프로그래머스
- Data Structure
- graph
- 리버싱
- javascript
- reversing
- socket
- dfs
- OneToMany
- Android
- 웹해킹
- queue
- 개발자
- 해외여행
- C
- Algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함