JavaScript 정렬 알고리즘: 선택 정렬
I've finished the uni - there is no way in hell I would still need data structures and algorithms, right? (that's what I thought, I forgot almost everything to make more room in my brain for football trivia and stupid memes :)) Until I quite embarrassed myself on one interview, and because of that I spent quite some time re-learning this stuff, which landed me a better job than the one I had. (YEAAH!) Again, check my blog if you wish! This is second part in our (cue the SSSR music) JavaScript Algorithm Series.
소개
완료 후 다음 Javascript 정렬 알고리즘인 선택 정렬로 이동합니다.
선택 정렬은 버블 정렬과 다소 유사하지만 더 높은 값을 올바른 위치에 배치하여 먼저 정렬하는 대신 더 작은 값을 올바른 위치에 먼저 배치합니다. 우리는 여전히 (대부분) 같은 방식으로 전체 배열을 반복합니다.
문제는 어떻게? 현재 가장 작은 값을 일종의 컨테이너 변수에 저장해야 합니다. 그런 다음 다른 요소의 값에 따라 해당 값을 다시 선언할 수 있습니다(일부 요소가 배열에서 이미 가장 작은 요소보다 작은 경우).
의사 코드
심상
입력[11, 17, 5, 28, 3, 6, 15]
을 사용하여 이 알고리즘을 시각화해 보겠습니다. 시각화는 visualgo이라는 놀라운 무료 도구를 사용하여 수행되었습니다.
처음에는 배열의 첫 번째 값(빨간색 요소)에 가장 작은 값이 할당됩니다. 그런 다음 알고리즘은 요소를 반복하고 가장 작은 값과 현재 요소(녹색)를 비교하고 더 작은 값을 찾으면 해당 값을 다시 선언합니다. 각 반복이 끝날 때마다 알고리즘은 현재 가장 작은 요소를 반복의 첫 번째 요소로 교체하므로 현재 가장 작은 요소가 적절한 위치에 정렬됩니다(색상이 주황색으로 변경됨).
구현
function selectionSort(arr) {
for (let i = 0; i < arr.length; i++) {
let smallest = i;
let j = i + 1;
for (; j < arr.length; j++) {
if (arr[j] < arr[smallest]) {
smallest = j;
}
}
if (i !== smallest) {
[arr[smallest], arr[i]] = [arr[i], arr[smallest]];
}
}
return arr;
}
selectionSort([11, 17, 5, 28, 3, 6, 15]);
각 외부 반복이 시작될 때 가장 작은 값을 배열의 첫 번째 값으로 설정합니다. 동일한 블록에서(ES6 let 선언을 사용하기 때문에) 값 j를 i + 1로 선언합니다. 그런 다음 배열의 모든 요소를 통과합니다. 현재 가장 작은 값보다 작은 값을 찾으면 가장 작은 인덱스를 j로 다시 선언합니다. 각 반복의 끝에서 더 작은 값이 있고 우리가 사용하여 시작한 값과 같지 않은 경우 값을 교환합니다. - [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
- 감사합니다 ES6.
빅오 복잡성
버블 정렬과 유사하게 선택 정렬의 평균 Big O는 (다시) 배열의 모든 요소를 다른 모든 요소와 비교하기 때문에 O(n2)입니다. 요소 수가 증가하면 런타임이 기하급수적으로 증가합니다. 선택 정렬은 스와핑을 줄이는 알고리즘을 사용하려는 경우 버블 정렬보다 더 유용할 수 있습니다. 왜냐하면 알고리즘은 모든 루프의 끝에서 한 번만 스와핑되기 때문입니다.
결론
그게 다야! 다음으로 이야기할 것은 삽입 정렬이므로 계속 지켜봐 주시기 바랍니다. 행복한 코딩되세요 :).
Reference
이 문제에 관하여(JavaScript 정렬 알고리즘: 선택 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/bracikaa/javascript-sorting-algorithm-selection-sort-178j
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function selectionSort(arr) {
for (let i = 0; i < arr.length; i++) {
let smallest = i;
let j = i + 1;
for (; j < arr.length; j++) {
if (arr[j] < arr[smallest]) {
smallest = j;
}
}
if (i !== smallest) {
[arr[smallest], arr[i]] = [arr[i], arr[smallest]];
}
}
return arr;
}
selectionSort([11, 17, 5, 28, 3, 6, 15]);
각 외부 반복이 시작될 때 가장 작은 값을 배열의 첫 번째 값으로 설정합니다. 동일한 블록에서(ES6 let 선언을 사용하기 때문에) 값 j를 i + 1로 선언합니다. 그런 다음 배열의 모든 요소를 통과합니다. 현재 가장 작은 값보다 작은 값을 찾으면 가장 작은 인덱스를 j로 다시 선언합니다. 각 반복의 끝에서 더 작은 값이 있고 우리가 사용하여 시작한 값과 같지 않은 경우 값을 교환합니다. -
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
- 감사합니다 ES6.빅오 복잡성
버블 정렬과 유사하게 선택 정렬의 평균 Big O는 (다시) 배열의 모든 요소를 다른 모든 요소와 비교하기 때문에 O(n2)입니다. 요소 수가 증가하면 런타임이 기하급수적으로 증가합니다. 선택 정렬은 스와핑을 줄이는 알고리즘을 사용하려는 경우 버블 정렬보다 더 유용할 수 있습니다. 왜냐하면 알고리즘은 모든 루프의 끝에서 한 번만 스와핑되기 때문입니다.
결론
그게 다야! 다음으로 이야기할 것은 삽입 정렬이므로 계속 지켜봐 주시기 바랍니다. 행복한 코딩되세요 :).
Reference
이 문제에 관하여(JavaScript 정렬 알고리즘: 선택 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/bracikaa/javascript-sorting-algorithm-selection-sort-178j
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그게 다야! 다음으로 이야기할 것은 삽입 정렬이므로 계속 지켜봐 주시기 바랍니다. 행복한 코딩되세요 :).
Reference
이 문제에 관하여(JavaScript 정렬 알고리즘: 선택 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bracikaa/javascript-sorting-algorithm-selection-sort-178j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)