Javascript를 사용한 정렬 알고리즘(2부)
세 가지 추가 정렬 알고리즘의 Javascript 구현을 보여 드리겠습니다.
다시 말하지만 이것은 알고리즘의 작동 방식과 성능에 대한 자세한 설명이 아닙니다. 그것에 대해 읽고 싶다면 여기 내가 찾은 멋진 리소스가 있습니다. Sorting Algorithms
간단하게 하기 위해 5개의 요소
list
만 있는 간단한 목록[4, 2, 3, 1, 5]
을 정렬하겠습니다.빠른 정렬
병합 정렬과 마찬가지로 이 알고리즘은 분할 정복 방식을 사용합니다. 피벗을 선택하고 해당 피벗과 관련하여 목록을 나누는 방식으로 작동합니다. 피벗보다 큰 모든 요소는 피벗의 오른쪽으로 이동하고 피벗보다 작거나 같은 모든 요소는 피벗의 왼쪽으로 이동합니다. 양쪽의 요소는 빠르게 정렬되며 전체 목록이 정렬될 때까지 반복됩니다.
비주얼
이것에 대한 시각은 알고리즘이 실제로 어떻게 작동하는지 설명하는 데 명확하지 않았습니다.
암호
function quickSort(list) {
if (list.length <= 1) {
return list
} else {
const left = []
const right = []
const sorted = []
const pivot = list.pop() // we're picking the last item to act as the pivot
const length = list.length
for (let i = 0; i < length; i++) {
if (list[i] <= pivot) {
left.push(list[i])
} else {
right.push(list[i])
}
}
return sorted.concat(quickSort(left), pivot, quickSort(right))
}
}
const list = [4, 2, 3, 1, 5]
const sorted = quickSort(list)
console.log(sorted)
힙 정렬
이 알고리즘은 binary-heap 이라는 데이터 구조를 활용합니다. 힙 정렬은 오름차순으로 요소를 정렬하기 위해 최대 힙을 생성한 다음 루트 노드를 마지막 노드로 교체하고 이 작업이 수행될 때마다 힙에서 정렬된 노드를 삭제하는 방식으로 작동합니다.
비주얼
암호
// create max heap
function maxHeap(input, i) {
const left = 2 * i + 1
const right = 2 * i + 2
let max = i
if (left < arrLength && input[left] > input[max]) {
max = left
}
if (right < arrLength && input[right] > input[max]) {
max = right
}
if (max != i) {
swap(input, i, max)
maxHeap(input, max)
}
}
function swap(input, indexA, indexB) {
const temp = input[indexA]
input[indexA] = input[indexB]
input[indexB] = temp
}
function heapSort(input) {
arrLength = input.length
for (let i = Math.floor(arrLength / 2); i >= 0; i -= 1) {
maxHeap(input, i)
}
for (i = input.length - 1; i > 0; i--) {
swap(input, 0, i)
arrLength--
maxHeap(input, 0)
}
return
}
let arrLength
const list = [4, 2, 3, 1, 5]
const sorted = heapSort(list)
console.log(list)
카운팅 정렬
지금까지 다룬 알고리즘에 비해 카운팅 정렬이 다소 독특하다는 것을 알게 될 것입니다. 정렬하는 동안 요소를 비교하지 않기 때문입니다. 숫자 키를 기반으로 작동합니다. 계산 배열을 만든 다음 이를 사용하여 요소의 올바른 위치를 결정함으로써 이를 수행합니다.
비주얼
암호
function countingSort(list, min, max)
{
let i
let z = 0
const count = []
for (i = min; i <= max; i++) {
count[i] = 0
}
for (i=0; i < list.length; i++) {
count[list[i]]++
}
for (i = min; i <= max; i++) {
while (count[i]-- > 0) {
list[z++] = i
}
}
return list
}
const list = [4, 2, 3, 1, 5]
const min = Math.min(...list)
const max = Math.max(...list)
const sorted = countingSort(list, min, max)
console.log(sorted)
즐거운 코딩하세요!
Reference
이 문제에 관하여(Javascript를 사용한 정렬 알고리즘(2부)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wangonya/sorting-algorithms-with-javascript-part-2-3g51텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)