[JavaScript] 버블정렬, 선택정렬

2022. 5. 31. 15:10·개발/html, css, js
728x90
반응형

1. 정렬

[1] 버블 정렬

전체 배열을 순회하면서 이전 항목이 다른 다음 항목보다 큰 경우 두 항목을 교환
모든 가능한짝을 비교하기 때문에 별로 좋진 않다.
6 1 2 3 4 5 를 정렬하려고 하면 순서는 다음과 같다.
1과 6을 비교 : 1 6 2 3 4 5
2와 6을 비교 : 1 2 6 3 4 5
3과 6을 비교 : 1 2 3 6 4 5 
4와 6을 비교 : 1 2 3 4 6 5
5와 6을 비교 : 1 2 3 4 5 6
//버블 정렬
function random(n){
    let arr = new Array();
    let num;
    let temp;
    for(let i = 0;i<=n; i++){
        arr.push(i);
    }
    for(let i = 0;i <arr.length;i++){
        num = Math.floor(Math.random()*n)
        temp = arr[1];
        arr[1] = arr[num];
        arr[num] = temp;
    }
    return arr;
}


function bubblesort(array){
    const arrlen = array.length;
    for(let i = 0; i<arrlen; i++){
        for(let k = 0 ; k<arrlen-1 -i;k++){
            if(array[k]>array[k+1]){
                let temp  = array[k];
                array[k] = array[k+1]
                array [k+1] = temp; 
            }
        }
    }
    return array;
}

let bubblesorting = random(1000);
console.log("버블 정렬 전 : ", bubblesorting);
let startTime = new Date().getTime() / 1000; //getTime 의 단위는 밀리초 => 나누기 1000을 해주면 초로 환산
console.log("버블 정렬 후 : ", bubblesort(bubblesorting));
let endTime = new Date().getTime() / 1000;
console.log(`정렬 시간 : ${endTime - startTime}`)

[2] 선택 정렬

가장 작은 항목을 찾아서 해당 항목을 배열의 현위치에 삽입

7 4 5 6 8 2 1

최솟값 1과 7을 교환 : 1 4 5 6 7 8 2

최솟값 2와 4를 교환 : 1 2 5 6 8 4 7 

최솟값 4와 5를 교환 : 1 2 4 6 8 5 7

최솟값 5와 6을 교환 : 1 2 3 5 8 6 7

최솟값 6과 8을 교환 : 1 2 3 5 6 8 7

최솟값 7과 8을 교환 : 1 2 3 5 6 7 8

//스왑하는 함수
function swap(arr,a,b){
    let temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}



function random(n){
    let arr = new Array();
    let num;
    let temp;
    for(let i = 0;i<=n; i++){
        arr.push(i);
    }
    for(let i = 0;i <arr.length;i++){
        num = Math.floor(Math.random()*n)
        temp = arr[1];
        arr[1] = arr[num];
        arr[num] = temp;
    }
    return arr;
}

function selectSort(arr){
    const arrlen = arr.length;
    let min;

    for(let i = 0; i<arrlen;i++){
        //최소항목을 현재 위치로 설정
        min = i;

        //더작은 항목이 있는지 배열의 나머지를 확인
        for(let k = i+1;k<arrlen; k++){
            if(arr[k]<arr[min]){
                min = k;
            }
        }
        //현재위치가 최소항목 위치가 아니라면 항목 swap
        if(i!=min){
            swap(arr, i,min);
        }
    }
    return arr;
    
}

let number = random(1000);
console.log("선택 정렬 전 : ", number);
let startTime = new Date().getTime() / 1000; //getTime 의 단위는 밀리초 => 나누기 1000을 해주면 초로 환산
console.log("선택 정렬 후 : ", selectSort(number));
let endTime = new Date().getTime() / 1000;
console.log(`정렬 시간 : ${endTime - startTime}`)

 

728x90
반응형

'개발 > html, css, js' 카테고리의 다른 글

[JavaScript, CSS] 콜백, 콜백지옥  (0) 2022.06.03
[JavaScript] 배열 관련 문제 2개  (0) 2022.05.31
[JavaScript] Class  (0) 2022.05.30
[JavaScript] 객체란  (0) 2022.05.30
[JavaScript] 고차함수  (0) 2022.05.29
'개발/html, css, js' 카테고리의 다른 글
  • [JavaScript, CSS] 콜백, 콜백지옥
  • [JavaScript] 배열 관련 문제 2개
  • [JavaScript] Class
  • [JavaScript] 객체란
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    go언어
    하이퍼레저
    ERC721
    명령어
    js
    html
    erc20
    컨테이너
    CSS
    go
    프로그래머스
    30일 챌린지
    React
    node.js
    도커
    블록체인
    node
    mysql
    nodejs
    30일챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[JavaScript] 버블정렬, 선택정렬
상단으로

티스토리툴바