728x90
300x250
SMALL
무작위 순서로 배열을 정렬할 경우 간단하게 아래와 같이 해결할 수 있다.
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(){return 0.5 - Math.random()});
그러나 위의 예시를 사용할 경우 특정 순열의 빈도가 높기 때문에 정확한 결과를 얻을 수 없다.
https://ko.javascript.info/task/shuffle
이유는 위의 링크에 설명이 잘 되어있다.
그래서 이런 문제를 해결하는 방법으로
피셔 예이츠 셔플을 이용할 수 있다.
const points = [40, 100, 1, 5, 25, 10];
for (let i = points.length -1; i > 0; i--) {
let j = Math.floor(Math.random() * (i+1));
let k = points[i];
points[i] = points[j];
points[j] = k;
}
피셔-예이츠 셔플 알고리즘은 배열 끝 요소에서 부터 시작해서 앞으로 하나씩 나아가면서 해당 요소 앞에 있는 임의 요소와 해당 요소를 바꿔치기 하는 알고리즘이다.
728x90
반응형
LIST
'javaScript > JS Tutorial' 카테고리의 다른 글
[javaScript]객체 배열 정렬하기 (0) | 2022.11.09 |
---|---|
[javaScript]배열 최소값 최대값 찾기 (0) | 2022.11.08 |
[javaScript]비교함수 숫자정렬 오름차순, 내림차순 (0) | 2022.11.06 |
[javaScript]배열의 일부를 잘라서 새 배열 만들기 slice() (0) | 2022.11.04 |
[javaScript]배열 원하는 위치 새 항목 추가/제거 splice() (0) | 2022.11.02 |
댓글