정렬 알고리즘이 "안정적"이라는 것은 무엇을 의미합니까?


43

다양한 정렬 알고리즘에 대해 읽을 때 일부는 "안정적"이고 일부는 그렇지 않다고 언급했습니다. 이것이 의미하는 바는 무엇이며 알고리즘 선택시 그 기준에 따라 어떤 상충 관계가 발생합니까?


32
이 질문은 wikipedia에서 1 분 안에 쉽게 대답 할 수 있습니다. en.wikipedia.org/wiki/Sorting_algorithm
마레 인피니 투스

5
@MareInfinitus 더 정확하게 : en.wikipedia.org/wiki/Sorting_algorithm#
안정성

4
이것은 자체 연구가 부족한 질문입니다. 위키 백과 사진으로 답변했습니다. 그리고 그것은 정말 좋은 피드백을 얻습니다. IMHO 그것은 닫혀 있고 공감하지 않아야합니다.
Mare Infinitus

4
반면에 나는 이것을보고 새로운 것을 배웠습니다. 내가 이것을 몰랐다는 것을 알았다면 나는 그것을 조사 할 수 있었지만 OP가 질문을했기 때문에 이제 내가 알지 못했던 것을 알았습니다.
Kazark

4
일반적으로 "Google it"또는 "wikipedia에서 찾아보기"는 StackExchange 사이트에서 허용되는 응답이 아닙니다. Google 및 Wikipedia 당국에 전화하여 신고자가 유효한 질문으로 확인한 내용에 대한 답변을 제공하지 않기 때문입니다. 질문이 프로그래머 나 stackexchange 내의 다른 질문과 쉽게 중복되는 경우 불만을 제기 할 수 있습니다.
Michael Paulukonis

답변:


88

안정적인 정렬은 비교 알고리즘이 둘 이상의 항목을 구별하지 않는 입력 세트의 원래 순서를 유지하는 정렬입니다 .

순위 별로 카드를 정렬 하지만 정렬별로 정렬 하지 않는 정렬 알고리즘을 고려하십시오 . 안정적인 정렬은 순위가 같은 카드의 원래 순서가 유지되도록 보장합니다. 불안정한 정렬되지 않습니다.

여기에 이미지 설명을 입력하십시오


38
수정 : 불안정한 알고리즘은 두 요소가 같을 때 정의되지 않은 동작을 나타내므로 순서가 때때로 유지 될 수 있습니다.
aaaaaaaaaaaa

9
멋진 사진, wikipedia와 매우 유사합니다. en.wikipedia.org/wiki/Sorting_algorithm
Mare Infinitus

9
@MareInfinitus : 공개 도메인에 있습니다. 원본 이미지의 속성을 확인하십시오.
Robert Harvey

2
좋은 그림은 평균적인 경우 많은 단어보다 빠르고 깊이 설명합니다. 법적 문제는 내가 이야기하고 싶지 않았습니다.
Mare Infinitus

3
@RobertHarvey 사실, 나는 편집기가 정확하다고 생각합니다. 귀하의 게시물에 따르면 안정적인 정렬은 동일한 소송에서 카드의 순서를 유지하지만 동일한 소송의 카드는 순위가 다르므로 정렬 된 순서를 달성하기 위해 다시 정렬해야합니다. 예를 들어, 정렬은 하트 2와 5의 순서를 유지하지 않습니다. 같은 등급 (및 다른 수트)을 가진 카드를 주문 하면 안정과 불안정을 구별 할 수 있습니다.
David Z

26

안정적인 알고리즘은 요소의 상대적 순서를 유지합니다.

따라서 안정적인 정렬 알고리즘은 비교되는 값의 상대적 순서를 동일하게 유지합니다.

X 차원을 기준으로 2D 포인트 모음을 정렬하는 정렬 알고리즘을 고려하십시오.

정렬 할 컬렉션 : {(6, 3), (5, 5), (6, 1), (1, 3)}

안정적인 정렬 : {(1, 3), (5, 5), (6, 3), (6, 1)}

정기 정렬 : {(1, 3), (5, 5), (6, 3), (6, 1)}또는{(1, 3), (5, 5), (6, 1), (6, 3)}


트레이드 오프에 관해서는 ... 글쎄, 안정적인 정렬은 덜 효율적이지만 때로는 필요합니다.

예를 들어 사용자가 열 머리글을 클릭하여 UI에서 값을 정렬하는 경우 동일한 값의 경우 이전 정렬 순서를 사용하는 것이 합리적입니다.


2
그래도 덜 효율적입니까? "분명한"것처럼 보이지만 최고의 정렬 알고리즘 중 일부는 본질적으로 안정적입니다 (예 : Tim 정렬과 같은 병합 정렬을 기반으로하는 것). 안정적인 추가 작업을 수행 할 필요가 없습니다.

9
안정은 일반적으로 성능과 관련이 없습니다. Mergesort는 O (n * log n)로 실행되며 안정적입니다. 힙 정렬은 비슷한 성능을 갖지만 안정적이지 않습니다.
Mare Infinitus

2
"안정성"은 예를 들어 데이터 구조에도 적용될 수 있습니다. "안정적인 힙"은 대기중인 순서와 동일한 우선 순위를 가진 항목을 대기열에서 제외시키는 힙입니다. 효율적인 경로 찾기 알고리즘에 매우 중요합니다.
BlueRaja-대니 Pflughoeft

1
메모리에서 O (n ln n) 비교 및 O (1) 인 안정적인 정렬이 없습니다 . 속도 만이 효율성의 척도는 아닙니다. 제자리에서 안정적으로 정렬 할 수 없다는 사실.
QuestionC

3
@QuestionC 블록 정렬 이 안정적이며 해당 범위에 맞습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.