기본 콘텐츠로 건너뛰기

Sorting algorithm 성능비교



그림출처 : http://dev-ahn.tistory.com/39

삽입정렬의 경우, 정렬대상이 완전히 정렬된 상태라면 안쪽 for문에서 걸리지기 때문에 시간복잡도는 O(n)이 된다.

병렬정렬의 경우, 임시메모리가 필요하다는 단점이 있다. 하지만 연결리스트를 정렬할 때는이런한 단점을 극복할 수 있다.

힙정렬의 경우도 힙저장공간이 필요하다는 단점이 있다.

퀵소트의 경우, 최악의 경우는 이미 데이터들이 정렬된 상태이고 pivot이 가장 작은 값으로 결정되는 경우이다. 이 경우 데이터가 둘로 나뉘는 횟수 k = n이고 되고
결과적으로 O(n^2)이 된다.
참고로, pivot값을 가운데에 두면 성능이 개선된다.

Radix(기수)정렬의 경우, 성능은 가장좋지만 적용할 수 있는 범위가 제한적이다.

댓글

이 블로그의 인기 게시물

Tree traversal의 3가지

1. 전위 순회 (Preorder Traversal) Root -> Left Tree -> Right Tree   ( 루트를 제일 처음에 방문 ) 2. 중위 순회 (Inorder Traversal) Left Tree -> Root -> Right Tree   ( 루트를 중간에 방문 ) 3. 후위 순회 (Postorder Traversal) Left Tree -> Right Tree -> Root   ( 루트를 제일 마지막에 방문 ) <소스코드> 출처 : http://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder /// C program for different tree traversals #include <stdio.h> #include <stdlib.h> /* A binary tree node has data, pointer to left child    and a pointer to right child */ struct node {      int data;      struct node* left;      struct node* right; }; /* Helper function that allocates a new node with the    given data and NULL left and right pointers. */ struct node* newNode(int data) {      struct node* node = (struct node*)                 ...