본문 바로가기

정렬2

[정렬] sort 버블정렬, 선택정렬, 삽입정렬, 쉘정렬, 병합정렬, 퀵정렬, 힙정렬, 계수정렬, 기수정렬까지... 많은 정렬들을 직접 구현해봤지만, 결국 실전에서는 이것들을 일일이 구현할 순 없다. 물론, 다 외워서 할 수 있으면 정말 좋긴 할 것이다. 실전에서 만약 정렬이 필요하다면, #include sort(v.begin(), v.end()); stable_sort(v.begin(), v.end()); STL함수를 써야할 것이다. sort 여기 있는 sort함수는 introsort라는 하이브리드 기법을 썼다고 한다. 불안정한 quick sort가 아니라서 다행이다. 시간복잡도 O(NlogN)을 보장한다. stable_sort 또한 중복되는 key에서 각 key가 가진 다른 값도 정렬하고 싶을 때는 stable_sor.. 2019. 9. 2.
[Sort] 대표적인 정렬의 모든 것 정렬(Sort) 비교정렬(Comparision Sort) 비교하여 정렬하는 방법은, 아무리 알고리즘을 잘 짜도 O(NlogN)보다 크다. 그렇지만, O(NlogN)도 충분히 빠른 정렬이고, 일반적인 경우에 대해 정렬할 수 있는 방법이기 때문에 이를 공부하는 것은 중요하다. O(N2) 정렬 1. 버블 정렬(Bubble sort) 장점 : "순서대로 대소 비교 후 큰 것을 뒤로 보낸다."를 그대로 구현하면 되기 때문에, 코드가 보기에 직관적이므로 구현이 쉽다. stable 정렬이다. 단점 : 최악이든 최선이든 O(N2)이기 때문에 굉장히 비효율적이다. 2. 선택 정렬(Selection sort) 장점 : "최댓값을 찾고, 맨 뒤의 원소와 바꾸어준다"를 그대로 구현하면 된다. 구현이 쉽다. 원소 교환 횟수가 .. 2019. 8. 31.
728x90