inflearn logo
강의

講義

知識共有

Do it! アルゴリズムコーディングテスト with C++

クイックソート (Quick Sort)

퀵정렬 질문

291

inseang24211535

投稿した質問数 1

3

퀵정렬 14:38에 32랑 15를 swap 한다고 하셨는데 그 이유를 모르겠어요. 첫번째 정렬에서는 start와 end가 만난 15가 45와 비교해서 45가 더 크기 때문에 15의 오른쪽으로 이동한다는건 알겠는데, 두번째도 똑같이 적용하면 [5, 15, 32, 24, 42]가 아닌가요??

c++ 코딩-테스트 알고리즘

回答 1

1

harucoding

안녕하세요. 반갑습니다.

말씀하신 부분이 설명이 혼선을 드린 부분이 있어서 답변드립니다.

이해하신 것이 모두 맞는 말씀인데, 제가 설명시 약간 혼합하여 말씀드린 부분이 있는 것 같습니다.

 

보통 배열에서는 설명드린것과 같이 중간에 삽입을 할 경우에는 이후 데이터를 모두 뒤로 한 칸씩 미뤄야 하는

로직이 필요하고 시간복잡도 이슈가 있기 때문에 swap을 더 일반적으로 사용합니다.

 

swap을 사용하는 부분은 19번 문제 코드를 보면 이해가 가능하실 것 같습니다.

다만 swap을 사용할 경우 pivot을 오른쪽 끝 data로 지정하였는지

왼쪽 끝 data로 지정하였는지에 따라 약간 로직을 생각해 보아야합니다.

 

이 경우는 오른쪽을 pivot으로 지정 하였기 때문에 두 그룹 중 큰 수 집합의 첫번째 수인 32와 pivot 값을 swap해야겠다고 제가 인지하고 말씀을 드렸네요. 첫번째 정렬과 달라서 충분이 혼선을 드릴 수 있었을 것 같습니다.

 

첫번째 정렬도 비슷하게 한다고 하면

42 32 24 5 15 60 90 45 의 상태에서

두 무리는

42 32 24 5 15 | 60 90 로 분리되고 pivot은 45입니다. 이때 pivot data의 위치가 오른쪽에 있기 때문에

큰 쪽 무리의 첫번째 값인 60과 swap을 진행하여 주면

42 32 24 5 15 45 90 60 이 되고 45를 기준으로 양쪽이 나누어 지게 됩니다.

 

좋은 질문 감사드리고 이부분은 제가 유튜브 고정 댓글로 부연 설명 및 책의 다음 쇄에도 추가 설명으로 기재해 두도록 하겠습니다.

감사하합니다. 좋은하루 되세요 🙂

 

 

수강평 이벤트

0

17

2

Reticle이 안나옵니다.

0

8

1

진행 방법 질문드립니다!

0

29

2

안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.

0

19

1

Singleton 관련 질문입니다.

1

31

2

갑자기 채점 사이트가 바뀌었어요

0

19

1

42. [세그먼트 트리 실전 문제] 구간 합 구하기3 (백준 2042)

0

64

1

10986번 질문 있습니다!

0

45

0

LCA 빠르게 찾기 - 트리의 높이에 따른 k값 질문

0

119

0

백준 1377 질문있습니다

0

218

1

백준 1722 교재 81 질문

0

330

1

백준11505, 교재 73번

0

282

1

백주 1456번

0

200

1

백준 1325, 교재 47번 문제 질문입니다.

0

358

1

백준 11404 플로이드 문제 질문있습니다.

0

260

1

문제 85번 질문드립니다

0

322

1

백준 13023 질문있습니다.

0

204

1

문제 8번 질문드립니

0

305

1

백준 1876여행 유니온 파인드 질문있습니다.

0

241

1

백준 2251 C++ 질문 있습니다.

0

398

2

i==k일떄 i++안해도되지않나요

0

436

1

알고리즘 코딩테스트 문제풀이 강의 - 14 절댓값 힙 구현하기 (백준 11286)

0

550

1

알고리즘 코딩테스트 문제풀이 강의 - 9 DNA 비밀번호 (백준 12891)

1

573

1

C++은 실전문제에 대한 강의가 없나요? 자바나 파이썬은 있는데 없는거 같아서요.

2

591

2