2018-7-6 알고리즘 종류들
기본적인 정렬 알고리즘
다양한 종류의 정렬 알고리즘
- 성능의 측면에서는 QuickSort, MergeSort, HeapSort가 빠르다.
기본적인 정렬 알고리즘
Selection Sort
- 기본적으로 가장 큰 값을 찾는다.
- 가장 큰 값을 가장 끝 값과 바꾼다.
- 나머지 작업을 반복한다.
- 이 과정을 마지막 2개의 값이 남을 때까지 반복을 한다.
- 모든 경우의 수가 같기때문에 최악의 경우 최선의 경우 평균의 경우가 같다.
Bubble Sort
- 기본적인 아이디어는 Selection Sort와 같다.
- 최대값을 찾아서 마지막자리와 바꾸는 방법이 SelectionSort와 차이가 있다.
- 1번째 값과 2번째 값을 비교해서 자리를 바꾼다. 2번째와 3번째와 비교를 한다.. … 그리고 n-1과 n과 자리를 바꾼다. 그 결과로 가장 큰 값이 마지막으로 된다. 이 경우의 한 사이클을 도는데, 시간복잡도는 n-1이다.
- 배열의 길이가 n일때
for(int i = 0; i <= n-1; i++) { compare(arr[i], arr[i+1]); }
- 첫사이클은 n-1까지 반복, 두번째사이클은 n-2까지 반복….
Insertion Sort
- 정렬할 데이터가 위와같이 6개라면, 첫번째 데이터만 봤을때는 이미 정렬이 되어있다.
- 1,2번째 데이터만을 봤을때는 서로 정렬을 한다.
-
13을 추가해서 12,15,13에 대해서 정렬을 한다.
- k-1번째까지 정렬이 된상태에서 k번째에 4를 삽입을 한다.
- 4가 들어갈 자리를 찾아야한다.
- 4가 들어갈 위치를 찾기위해서는 1.앞에서부터 찾는다. 2.뒤에서부터찾는다.
- 4의 위치를 찾았더라도 배열이기때문에 뒤에 있는 배열을 한칸씩 이동해야한다.
- 앞에서부터 비교를 하면 데이터를 한칸씩 미뤄야한다.
- 뒤에서부터 비교를 하는게 좀 더 효율적이다.
- insert할 값을 tmp라는 임시변수에 저장을 한다.
- tmp값을 바로 앞에 값부터 순차적으로 비교를 한다.
- 앞에 값이 tmp값보다 크면 한칸 뒤로 shift한다.
- 운이 좋으면 한번만에 끝난다.
- 최악의 경우 모든값과 다 비교를 한다. i-1번의 비교를 한다.
- 최선의 경우는 한번만 비교를 하면된다. Bubble, Selection정렬의 경우 최악과 최선의 경우의 시간복잡도가 같지만, SelectionSort의 경우는 다르다.
Written on July 6, 2018