알고리즘
정렬
망재이
2023. 3. 7. 00:04
- 정렬이랑 데이터를 특정한 기준에 따라 순서대로 나열하는 것
- 선택 정렬 : 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸는 것
import java.util.*;
public class Main {
public static void main(String[] args) {
int n = 10;
int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
for(int i=0;i<n;i++) {
int min_index = i; //가장 작은 원소의 인덱스
for(int j=i+1; j<n; j++) {
min_index = j;
}
}
//스와프
int temp = arr[i];
arr[i] = arr[min_index];
arr[min_index] = temp;
}
for(int i=0;i<n;i++) {
System.out.print(arr[i]+" ");
}
}
}
- 시간 복잡도는 O(N의 2제곱)
- 삽입 정렬 : 처리되지 않은 데이터를 하나씩 골라 적절한 위치에 삽입하는 방법
import java.util.*;
public calss Main {
public static void main(String[] args) {
int n = 10;
int[] arr = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};
for(int i=1;i<n;i++) {
//인덱스 i부터 1까지 감소하며 반복하는 문법
for(int j=i;j>0;j--) {
//한 칸씩 왼쪽으로 이동
if(arr[j] < arr[j-1]) {
//스와프
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
//자기보다 작은 데이터를 만나면 그 위치에서 멈춤
else break;
}
}
for(int i=0;i<n;i++) {
System.out.print(arr[i]+" ");
}
}
}
- 시간복잡도는 O(N의 제곱)
- 현재 리스트의 데이터가 거의 정렬되어 있는 상태는 매우 빠르게 동작하므로 최선의 경우 O(N)의 시간 복잡도 가짐
728x90