Bubble Sort View

class Arr {
    constructor() {
        this._list = new Array(100).fill(0).map(v => Math.random() * 100 + 1);
    }
 
    bubbleSort() {
        let len       = this.list.length,
            cnt       = len,
            loopCount = 0;
 
        for(let i = 0; i < len; i++, cnt--)
            for(let j = 0; j < cnt; j++, loopCount++) 
                if(this.list[j] > this.list[j + 1])
                    this.bitSwap(j, j + 1);
 
   //cnt를 사용하지 않고 루프를 돌릴 경우 약 5000회 이상의 반복문을 추가하게 된다. 
        console.log(this.list, loopCount);
    }
 
    swapTwo(i, j) {
        this.list[j] = [this.list[i], this.list[i] = this.list[j]][0];
    }
 
    swapOne(i, j) {
        [this.list[i], this.list[j]] = [this.list[j], this.list[i]];
    }
 
    bitSwap(i, j) {
        this.list[i] ^= this.list[j];
        this.list[j] ^= this.list[i];
        this.list[i] ^= this.list[j];
    }
 
    set list(list) {this._list = list;}
    get list() {return this._list;}
}
 
 
new Arr().bubbleSort();

배열을 순회하며, 다음번의 값이 나보다 크면 교환하는 방식으로 합니다

포문에서 - cnt 를 해 주는 이유는 순회한 횟수 만큼은 더는 뒤로 돌 필요가 없기 때문이며 (이미 뒤쪽은 정렬이 끝난상태라 앞쪽만 계속 정렬시킨다)

저 - cnt 를 해주느냐와 안해주느냐의 차이는 실제 약 100회 이상의 루프 감소효과가 발생했습니다.