bubbleSort
공통 접근 방법
수행 시간 단축을 위해 정렬이 한 차례 끝난 후 어떤 요소도 위치가 바뀌지 않았다면 배열이 이미 정렬된 상태이므로 종료시킵니다. 비교를 위해 spread 를 이용해 값 복사를 한 후, 정렬이 한 차례 끝난 후 정렬된 배열과 원본 배열을 JSON.stringify 를 이용해 값 비교를 합니다. 만약 같으면 멈추고, 다르면 계속 정렬을 수행합니다.
해결방법1
이중 for문 이용하기
const bubbleSort = function (arr) {
let copyArr = [...arr];
let tmp=0;
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr.length-(i+1);j++){
if(arr[j]>arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
}
}
if(JSON.stringify(copyArr) === JSON.stringify(arr)) {
return arr
}
}
return arr
};
해결방법2
재귀 이용하기
const bubbleSort = function (arr,n=arr.length) {
if(n===1 || n===0){return arr;}
let copyArr = [...arr];
for(let i =0; i<n-1; i++){
if(arr[i]>arr[i+1]){
[arr[i],arr[i+1]] =[arr[i+1],arr[i]];
}
}
if(JSON.stringify(arr) === JSON.stringify(copyArr)){
return arr;
}
return bubbleSort(arr,n-1);
};'알고리즘 > 기타' 카테고리의 다른 글
| 부분집합 여부 확인 (isSubsetOf ) (3) | 2023.04.19 |
|---|---|
| 재귀 (2) | 2023.04.12 |