[알고리즘 js]정렬#1

선택정렬 버블정렬

프로그래머스 관련 문제
- level1 K번째 선수
- level2 가장큰수
- level2 H-Index

제한사항: 정수 배열을 오름차순 정렬 하시오 (작은수 ... 큰수)

선택정렬

0번째 보다 작은수가 뒤쪽에 존재하면 그 수와 위치를 바꿈
1번째 보다 작은수가 뒤쪽에 존재하면 그 수와 위치를 바꿈
.
.
.

function 선택정렬(arr){
  let answer = arr;
  for (let i = 0; i < arr.length - 1; i++) {
    idx = i;
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[idx] > arr[j]) {
        idx = j;
      }
    }
    [arr[i], arr[idx]] = [arr[idx], arr[i]];
  }
  return answer;
}

버블정렬

solution1
0번째 1번째 비교해서 1번째가 작으면 위치 바꿈
1번째 2번째 비교해서 2번째가 작으면 위치 바꿈
.
.
.
0번째 1번째 비교해서 1번째가 작으면 위치 바꿈
1번째 2번째 비교해서 2번째가 작으면 위치 바꿈
.
.
.
길이-1 번째 만큼 반복 (다음 번째와 비교하기 때문에 길이-1만큼 반복)

function solution1(arr) {
  let answer = arr;
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < arr.length - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
    console.log('sol1', arr);
  }
  return answer;
}

solution2

let index = arr.length -1 (배열의 마지막 인덱스) 

// 뒤부터 정렬 하기때문에 이미 정렬된 부분은 순회 하기 않기 위해 선언

0번째 1번째 비교해서 1번째가 작으면 위치 바꿈
1번째 2번째 비교해서 2번째가 작으면 위치 바꿈
.
.
.
index 만큼 반복
index 1 감소
0번째 1번째 비교해서 1번째가 작으면 위치 바꿈
1번째 2번째 비교해서 2번째가 작으면 위치 바꿈
.
.
.
index 만큼 반복
index 1 감소
index 가 1 이 될때까지 반복

```js
function solution2(arr) {
  let answer = arr;
  let index = arr.length-1
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = 0; j < index; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      }
    }
    index--
  }
  return answer;
}

j 값을 감소 시키면서 반복하면 뒤부터 정렬 된다.

좋은 웹페이지 즐겨찾기