둥둥잇 2014. 11. 21. 01:46


알고리즘의 의미

: 문제를 해결하기 위한 일련의 명령이나 반복되는 절차



정렬 알고리즘

찾고자 하는 데이터를 빠르고 쉽게 찾을 수 있게 하는 것이 목적



* 버블 정렬

- 데이터 집합 내의 이웃 요소들끼리의 교환을 통해 정렬 수행

이웃 요소들끼리 비교 비교 비교.... 마지막 까지 가서 마지막 요소는 제외하고 다시 반복!!!

- 버블 정렬의 비교 횟수 : n(n-1)/2



* 삽입 정렬

- 데이터 집합을 돌면서 정렬이 필요한 요소를 뽑아내 이를 적당한 곳에 삽입해 나감

like 카드 정리 하기ㅋㅋ

비교 범위를 늘려가면서 정렬이 필요한 아이를 적당한 위치로 이동시킴

- 삽입 정렬의 비교 횟수 : n(n-1)/2

- 데이터 집합이 정렬이 되어 있으면 비교를 하지 않음!! => 평균적으로 삽입 정렬이 더 나은 성능을 보임ㅋ



+ 메모리 내용을 이동시키는 기능의 함수

   memmove(새로운 메모리 주소, 원본 데이터 주소, 이동시킬 데이터 양)



* 퀵 정렬

1. 데이터 집합 내 임의의 기준 요소를 선택

2. 무조건 기준 요소보다 작으면 기준보다 왼쪽, 크면 오른쪽으로

3. 왼쪽에 있는 데이터 집합 내에서 다시 임의의 기준 요소를 선택해 2를 반복

- 좋은 기준 요소를 선택하면 최상의 성능 발휘

- 데이터 집합의 정렬 상태에 따라 성능 좌우

- 이상적인 경우 퀵 정렬의 비교 횟수 : nlong_2n

  이상적이지 않은 경우 퀵 정렬의 비교 횟수 : n(n-1)/2


- C언어의 표준 라이브러리에 퀵 정렬 함수 제공 = >qsort()


void qsort( void *base, size_t num, size_t width, int(_cecl *compare) (const void *, const void *) );

            데이터 집합 주소/데이터 갯수/한 데이터 크기/비교 함수에 대한 포인터







출처 : 뇌를 자극하는 알고리즘 (한빛미디어)