Skip to content

Conversation

@cadst
Copy link
Contributor

@cadst cadst commented Sep 15, 2025

📚 학습 주제

  • 주차: [3주차-1]
  • 주제: [배열과 메서드

📝 학습 내용 체크리스트

✅ 개념 요약

  • 주요 개념들을 이해하기 쉽게 정리했는가?
  • 핵심 포인트를 놓치지 않고 요약했는가?

🔍 모르는 개념 연구

  • 이해하기 어려웠던 개념들을 조사하고 정리했는가?
  • 추가 학습이 필요한 부분을 명시했는가?

💻 예시 코드 및 설명

  • 개념을 설명하는 실용적인 코드 예시를 작성했는가?
  • 코드에 대한 상세한 설명을 포함했는가?

📋 주요 학습 개념 설명/요약 (선택)

  • 배열은 다양한 메서드가 있다.
  • forEach, map, filter, sort, reduce 등 각 메서드를 어떻게 적용해보면 좋을지 배열 문제를 풀면서 익히면 도움이 될 것이다 !
  • 메서드의 인자인 함수는 보통 (item, index, array) 순이며
  • reduce 메서드는 (acc, item, index, array)이다 !
  • 새로운 개념인 thisArg도 알고 있다면 유용하게 쓸 수 있다.

❓ 질문사항 및 토론 포인트

  • Quicksort란 뭘까?

📖 참고 자료 (선택)

🤡 스터디 이외의 이번주차 학습질문 (선택)

@hyuns8328
Copy link
Contributor

동국님 pr보다가 quick sort가 뭐지하고 구글링 해 보니
자바스크립트에서 퀵 정렬 (Quick sort)는 '분할 정복' 방식을 사용하는 매우 빠른 정렬 알고리즘이고,
배열에 피벗(pivot)이란 요소를 기준으로 삼아 자신보다 작은 값들은 왼쪽, 큰 값들은 오른쪽으로 분할하고 정렬하는 방식이라고 합니다!

평균적으로 "O(n log n)의 시간 복잡도"라는 것을 가져서 주로 대규모 데이터셋에서 효율적이라고 합니다!

작동 방식으로는

  1. 피벗 선택 : 배열에서 하나의 요소를 '피벗'으로 선택.
  2. 분할 (Partition) : 선택된 피벗을 기준으로, 피벗보다 작은 값은 왼쪽, 큰 값은 오른쪽으로 옮기고 이 과정을 통해 피벗의 최종 위치가 결정됨.
  3. 재귀 호출 : 피벗을 기준으로 나뉜 두 부분 배열에 대해 같은 과정을 재귀적으로 반복.
    (재귀적 : 자기 자신을 이용하여 정의하거나 반복해서 사용되는 특성)
  4. 정렬 완료 : 각 부분 배열의 크기가 0 또는 1개가 되면 정렬이 완료

이렇게 작동한다고 하고요! 주요 특징으로는

빠른 속도 : 평균적으로 매우 빠른 실행 시간 (O9n log n))을 가지는 것이 가장 큰 장점이라고 합니다!
제자리 정렬 (In-place Sort) : 추가적인 메모리 사용을 거의 하지 않고도 제자리 정렬이 가능하다는 장점.
분할 정복 알고리즘 : 문제 전체를 작은 단위로 나누어 해결하는 분할 정복 기법의 일종.

이렇게 세 가지 정도가 있고 자바스크립트 외에서도 사용된다고 하네요!
JS에서의 구현 예시는 이렇게 된다고 합니당
`function quickSort(arr) {
if (arr.length <= 1) {
return arr; // 배열의 길이가 1 이하이면 이미 정렬된 상태
}

const pivot = arr[0]; // 피벗을 배열의 첫 번째 요소로 선택
const left = [];
const right = [];

for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]); // 피벗보다 작으면 왼쪽 배열에 추가
} else {
right.push(arr[i]); // 피벗보다 크거나 같으면 오른쪽 배열에 추가
}
}

// 왼쪽 배열, 피벗, 오른쪽 배열을 재귀적으로 정렬하여 병합
return [...quickSort(left), pivot, ...quickSort(right)];
}

const numbers = [5, 3, 8, 4, 2, 7, 1, 6];
console.log(quickSort(numbers)); // [1, 2, 3, 4, 5, 6, 7, 8]`

@cadst
Copy link
Contributor Author

cadst commented Sep 15, 2025

현성님이 작동 방식을 일목요연하게 정리해주셔서 이해가 안되었는데 이제 좀 알 것 같습니다 !
감사합니다 :)

@tkp12345 tkp12345 merged commit 0a17b53 into podo-javascript:main Sep 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants