배열과 반복문, if를 이용하여 선택정렬을 만들다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 2. 선택 정렬
// 첫번째 값에 어울리는 요소를 찾고 그 기준에 따라 값을 정렬함
// (내 생각) 인덱스 0 부터 맞춰나간다.
// 오름차순 기준으로 인덱스 0 자리보다 작은 걸 찾아서
// 제일 작은 수를 minNum에 넣고 결국 그 minNum을 제일 앞에 두고
// 제일 작은 수가 있던 자리에 제일 앞에 있던 것을 둔다.
// 과정이 진행되면 제일 작은 수의 자리는 과정에서 생략해야한다.
let arr = [13, 56, 9, 1, 23];
// Step 1 -> 기준 0번째
let lenArr = arr.length // 5
let minNum = 0 // 가장 작은 수 보관할 변수
console.log("선택정렬")
for (i = 0; i <= lenArr - 2; i++) { // 0 1 2 3 / 하나의 수가 비교할 과정 수
for (j = i + 1; j <= lenArr - 1; j++) { // 1 2 3 4 / 비교 당할 수니까 위의 하나의 수의 다음 인덱스부터 시작해야함
if (arr[i] > arr[j]) { //비교
let temp = arr[i] // 비교하는 기준 수 (선생님 변수 arr[i] -> base) (j -> i)
minNum = arr[j] // 비교 당하는 수 중에 가장 작은 수 보관
arr[j] = temp // 가장 작은 수가 있던 자리에 비교 기준 수 배치
arr[i] = minNum // 비교하는 기준 수 (맨 앞자리)에 가장 작은 수 배치
}
} console.log(arr)
}
</script>
</body>
</html>
버블 정렬과는 반대로 인덱스 0(맨 앞)부터 맞춰나가는 정렬 방식이다. 오름차순으로 정렬해보겠다.
처음엔 인덱스 0 을 기준으로 올라가면서 비교해서 처음으로 인덱스 0보다 작은 수를 minNum에 대입해서 보관하고 기준 수를 temp에 보관하고 작은 수가 있던 자리에 기준 수를 배치하고, 기준 수가 있던 자리에 minNum을 배치하면 현재 과정에서 가장 앞자리에 비교하는 수 중에서 가장 작은 수가 배치된다.
그 다음 반복 과정은 맨 앞자리 0 인덱스가 고정되어있기 때문에 그 다음 앞자리 인덱스 1에 들어갈 가장 작은수를 찾아야한다. 기존에 있던 인덱스 1 자리 수를 기준 수로 생각하고 인덱스를 높여가며 비교해서 가장 작은수를 인덱스 1자리에 배치하고 가장 작은 수가 있던 자리에 기준 수를 배치한다.
같은 방식으로 반복하다보면 오름차순 선택 정렬이 완성 되어있다. 모르겠다면 리팩토링 과정을 스스로 해보고 최종 for문을 만들면 된다.
'Front-End > 1. JavaScript 기초' 카테고리의 다른 글
[JS] Ex22_버블정렬.html (0) | 2023.06.15 |
---|---|
[JS] Ex21_가위바위보_실습.html (0) | 2023.06.15 |
[JS] Ex20_배열함수.html (0) | 2023.06.15 |
[JS] Ex19_배열실습.html (0) | 2023.06.15 |
[JS] Ex18_배열.html (0) | 2023.06.14 |