각 단계에서 가장 작은 원소를 선택하고 처리되지 않은 원소중 가장 앞에 있는 원소랑 자리를 교체함.

const arr = [2, 4, 3, 1, 9, 6, 8, 7, 5];
function selecttoinSort(arr) {
for (let i = 0; i < arr.length; i++) {
let minIndex = i; // 0
for (let j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
// temp = arr[0] temp = 2
let temp = arr[i];
// arr[0] = arr[3], 2 = 1
arr[i] = arr[minIndex];
// arr[3] = 2
// 스왑이 일어나서 (1,이랑 2 랑 자리 바꾸게 됨)
// 1 4 3 2 9 6 8 7 5
// 다음 for 루프에서는 i = 1일꺼고 minindex도 1부터 시작해서 한 번 바꾼 자리는 고정이다.
arr[minIndex] = temp;
}
}
- 각 단계에서는 인접한 두 개의 원소를 비교하여, 필요시 위치를 변경한다.
- 첫째ㅔ와 둘째를 비교, 둘째와 셋째를 비교, 셋째와 넷째를 비교하는 방식이다.
- 한 번의 단계가 수행되면, 가장 큰 원소가 맨 뒤로 이동한다.
- 따라서, 그 다음 단계에서는 맨 뒤로 이동한 데이터는 정렬이 끝난거다.
const arr = [1, 5, 2, 3, 6, 7];
function bublleSort(arr) {
for (let i = arr.length - 1; i > 0; i--) {
for (let j = 0; j < i; j++) {
// 여기 등호만 바꿔주면 오름차순, 내림차순 정렬을 할 수 있다.
if (arr[j] > arr[j + 1]) {
// temp = arr[0] => temp = 1
let temp = arr[j];
// arr[0] = arr[1] => 5
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
// 1
}
}
}
O(n^2) 으로 비효율적임.
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
for (let j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
let temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
} else {
// 자기보다 작은 데이터를 만나면 그 위치에서 멈춤
break;
}
}
}
}
- 분할 : 큰 문제를 작은 부분 문제로 분할한다.
- 정복 : 작은 부분 문제를 각각 해결한다.
- 조합 : 해결한 부분 문제의 답을 이용하여 다시 큰 문제를 해결한다.
큰 문제를 작은 문제로 분할 하는 방식이 재귀함수의 동작 방식과 유사하다. 더 이상 쪼갤 수 없는 크기가 될 때까지 계속하여 분할한다.



const arr = [8, 4, 6, 1, 2, 5, 7, 3];
// 병합 수행함수
function merge(arr, left, mid, right) {
let i = left;
let j = mid + 1;
let k = left; // 결과 배열의 인덱스
while (i <= mid && j <= right) {
if (arr[i] < arr[j]) sorted[k++] = arr[i++];
else sorted[k++] = arr[j++];
}
// 왼쪽 배열에 대한 처리가 다 끝난 경우
if (i > mid) {
for (; j <= right; j++) sorted[k++] = arr[j];
// 오른쪽 배열에 대한 처리가 다 끝난 경우
} else {
for (; j <= mid; i++) sorted[k++] = arr[i];
}
// 정렬된 배열 결과를 원본 배열에 반영하기
for (let x = left; x <= right; x++) {
arr[x] = sorted[x];
}
}
function mergeSort(arr, left, right) {
if (left < right) {
let mid = parseInt((left + right) / 2);
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
arr.sort(function(a,b){
if( a> b) return -1
else if (a < b) return 1
else return 0
})
function compare(a,b){
let upperCaseA = a.toUpperCase()
let upperCaseB = b.toupperCase()
if(upperCaseA < upperCaseB) return -1
else if(upperCaseA > upperCaseB) return 1
else return 0
}
arr.sort(compare)
let test = [
{ name: "김호준", score: 97 },
{ name: "김땡댕", score: 87 },
{ name: "홍길동", score: 90 },
];
function compare (a,b){
return b.score -a.score
}
arr.sort(compare)