C++에서는 데이터 집합의 사용자 지정 정렬을 허용하는 "Excel/Access와 비슷한"(견적) 쿼리 작성기를 구현해야합니다. 쿼리 작성기 또는 SQL에서 "ORDER BY a, b, c"를 사용하여 Excel에서 열 A, B 및 C별로 정렬하면 순서대로 모든 As를 얻고 순서대로 동일한 각 그룹 내의 모든 Bs를 얻습니다. 각 그룹 내의 모든 C를 순서대로 정렬합니다. 이는 대부분의 사람들이 "a, b, c로 정렬/정렬"하여 이해하는 것입니다. 이것은 "c로 정렬"을 수행 한 다음 "b로 정렬"을 수행 한 다음 "정렬 기준"으로 처리하는 것과 같습니다. 즉. 역순으로 각 열에 개별적으로 정렬 - stable_sort를 사용하는 한. 내 프로그램에서 어떻게 구현했는지. 사용자가 "sort by a, b, c"라고 말하면 프로그램은 stable_sort를 c, stable_sort를 b, stable_sort는 같은 결과로, 지금까지 사용했던 모든 데이터 세트를 사용합니다. 내 질문은이 안정적인 정렬 알고리즘을) 및 모든 열의 조합을 사용하는 모든 데이터 집합 (제공되는 잘 알려진 동등한이며, 거기에 대한 수학적 증거도 무엇입니까? Google이나 다른 방법 (프로그래머, 통계 학자 및 수학자에게 묻기)을 통해 그러한 증거를 찾지 못했습니다.정렬 a, b, c는 정렬 c와 같습니다. 정렬 b; 정렬?
2
A
답변
4
네, 맞습니다.
정렬 알고리즘은 동일한 키를 가진 두 개의 레코드 R과 S가 있고 원본 목록의 S 앞에 R이 나타나는 경우 안정적입니다. R은 항상 정렬 된 목록에서 S 앞에 나타납니다.
b
에 정렬 한 후 a
에 정렬하여 "b
에 의해 다음, a
을 기준으로 정렬"을 구현하는 알고리즘을 고려하십시오. 첫 번째 정렬 (b
)은 정렬 알고리즘 (안정성은 이 아니며 첫 번째 정렬에 대한 요구 사항이이 아님)보다 높은 b
이있는 레코드보다 먼저 낮은 b
인 모든 레코드를 남겨 둡니다.
두 번째 정렬 (a
)은과 동일 할 때만 b
에주의해야합니다. 안정적인 덕분에이 정렬은 정렬 전과 동일한 순서로 - 즉 b
순으로 동일한 a
의 레코드를 남겨 둡니다. 이것은 정확히 a
, 그 다음에 b
순으로 정렬 할 때 달성 한 것입니다.
더 많은 정렬 단계를 추가하면 이전 단계의 결과가 원래 순서대로 유지된다는 것을 관찰함으로써 동일한 증명이 두 개 이상의 키를 기준으로 정렬까지 확장 될 수 있습니다. 정확하게 동일한 그룹 내에서 원하는 순서입니다 더 높은 정렬 우선 순위를 갖는 키.
관련 문제
- 1. A/B 테스트 검색 결과 정렬 옵션
- 2. 정렬
- 3. 정렬
- 4. 정렬
- 5. 정렬
- 6. 정렬
- 7. 임시 B 트리 제거 SQLite 쿼리에서 정렬
- 8. CoreData 정렬 엔티티 정렬
- 9. 그룹 및 제목별로 정렬 정렬
- 10. 기수 정렬 및 개수 정렬
- 11. 검도 그리드 대소 문자 구분 정렬 - MVC에서 A a B b C c로 정렬하는 방법?
- 12. LaTeX : 여러 정렬 환경 정렬
- 13. 선택 정렬 배열 정렬
- 14. 요일을 PHP 정렬 함수로 정렬
- 15. 퀵 정렬 정렬 문제
- 16. 정렬 내에서의 SQL 정렬
- 17. 모듈러스로 정렬
- 18. 총 배열별로 정렬 정렬
- 19. 정렬
- 20. 정렬 정렬 : 어셈블리
- 21. 정렬
- 22. ElasticSearch의 최신 레코드 정렬 및 정렬
- 23. 리눅스 정렬 명령으로 복수 키로 정렬
- 24. 검도 UI 정렬 및 정렬 정렬
- 25. 개체 정렬
- 26. 정렬
- 27. 정렬
- 28. 개월 단위로 정렬 정렬
- 29. 정렬/정렬 메커니즘
- 30. arraylist 정렬 arrylist 정렬
동등성에 대해 잘 모르겠지만 성능 향상을 위해 제안 된 구성표가 올바르게 이해하는 경우 소리가 나빠집니다. 각 주문에 대해 항상 _entire_ 데이터 세트를 정렬하는 것처럼 들립니다. 이것은 첫 번째 순서에 대해 전체 데이터 집합이 정렬되고 각 추가 순서에 따라 데이터 집합의 하위 집합 만 정렬되는 "전달"순서의 최악의 경우 여야합니다. – ldav1s
성능이 이상적이지 않다는 것에 동의했습니다. 코딩에 소요되는 시간면에서 볼 때 더 효율적입니다. 응용 프로그램이 처리해야하는 데이터 세트가 최대 10,000 행, 일반적으로 훨씬 적고 하드웨어가 현대적이며 응용 프로그램이 사용자 중심이므로 충족해야하는 마감 시간이 있고 코딩 시간을 소비 할 수있는 경우 실용적인 것처럼 보입니다. 다른 곳에서 - 이렇게하는 것이이 방법으로 충분할 지 궁금 해서요. 나는 그것이한다고 생각한다 : 그것은 사용자가 원하는 것을 수행하고 성능에 미치는 영향은 무시할 만하다. 그러나 속도가 업무상 중요한 경우라면 절대적으로 최선의 방법은 아닙니다. – drkvogel