728x90
데이터를 순서대로 나열하는 방법입니다.
예시: 큰 수 → 작은 수 (내림차순), 작은 수 → 큰 수 (오름차순)
🔸 Bubble Sort (버블 정렬)
✅ 특징
- Sort를 이해하기 매우 쉽다.
- 성능이 좋지 않다.
- 바로 옆 인자와 비교
✅ 코드 (Java)
int size = arr.length;
for(int i = 1; i < size; i++) {
for(int j = 0; j < size - i; j++) {
if(arr[j] > arr[j + 1]) {
swap(arr, j, j + 1); // 구현 필요
}
}
}
✅ 시간 복잡도
- O(N^2)
🔗 참고 링크
- GitHub: https://github.com/Raconer/JavaCode/blob/master/src/test/java/com/java/dataStructure/sort/Bubble.java
- YouTube: https://youtu.be/lyZQPjUT5B4
🔸 Selection Sort (선택 정렬)
✅ 특징
- 가장 작은/큰 숫자 인덱스를 저장하여 한 라운드 종료 시 Swap
✅ 코드 (Java)
public static void selectSort(int[] arr){
int size = arr.length;
for(int i = 0; i < size - 1; i++) {
int index = i;
for(int j = i + 1; j < size; j++){
if(arr[index] > arr[j]){
index = j;
}
}
swap(arr, i, index); // 구현 필요
}
}
✅ 시간 복잡도
- O(N^2)
🔗 참고 링크
- GitHub: https://github.com/Raconer/JavaCode/blob/master/src/test/java/com/java/dataStructure/sort/Select.java
- YouTube: https://youtu.be/Ns4TPTC8whw
🔸 Insertion Sort (삽입 정렬)
✅ 특징
- 비교 대상이 조건에 맞지 않으면 루프 종료 → 효율적
✅ 코드 (Java)
public static void InsertSort(int[] arr){
int size = arr.length;
for(int i = 1; i < size; i++){
for(int j = i; j > 0; j--){
if(arr[j] < arr[j - 1]){
swap(arr, j, j - 1); // 구현 필요
}else{
break;
}
}
}
}
✅ 시간 복잡도
- O(N^2)
🔗 참고 링크
- GitHub: https://github.com/Raconer/JavaCode/blob/master/src/test/java/com/java/dataStructure/sort/Insert.java
- YouTube: https://youtu.be/ROalU379l3U
📌 기타 정렬 알고리즘 링크
- Quick Sort: https://youtu.be/ywWBy6J5gz8
- Merge Sort: https://youtu.be/XaqR3G_NVoo
- Shell Sort: https://youtu.be/CmPA7zE8mx0
- 16가지 정렬 알고리즘 시각화: https://youtu.be/kPRA0W1kECg
- 길 찾기 알고리즘 시각화: https://qiao.github.io/PathFinding.js/visual/
📚 참고 자료
- 생활코딩 정렬 설명: https://opentutorials.org/course/543/6046
- 알고리즘 시각화: http://www.comp.nus.edu.sg/~stevenha/visualization/index.html
- VisuAlgo: https://visualgo.net/en
728x90
'Data Structure' 카테고리의 다른 글
큐(Stack)/스택(Queue)[1] (0) | 2023.04.15 |
---|---|
Hash Tables (0) | 2023.04.15 |
성능 분석 (0) | 2023.04.15 |
자료구조와 소프트웨어 생명주기 (0) | 2023.04.15 |