정렬은 데이터를 정해진 기준에 따라 배치해 의미 있는 구조로 재설정하는 것을 말한다.
정렬을 수행하고 난 뒤에도 같은 key값을 가진 원소들의 순서가 유지되는 정렬
정렬을 수행하고 난 뒤에도 같은 key값을 가진 원소들의 순서가 보장되지가 않는다.
데이터의 인접 요소끼리 비교하고, swap 연산을 수행하며 정렬하는 방식
시간복잡도를 계산하면,O(n^2) 이다. 또한, Bubble Sort는 정렬이 돼있던 안돼있던, 2개의 원소를 비교하기 때문에 최선, 평균, 최악의 경우 모두 시간복잡도가 O(n^2) 으로 동일하다.
버블 정렬 과정
1. 비교 연산이 필요한 루프 범위를 설정
2. 인접한 두 개의 데이터 값을 비교한다
3. Swap조건(내림차순 / 오름차순)에 부합하면 Swap한다.
4. 루프 범위가 끝날 때까지 2~3번 과정을 반복한다.
5. 정렬 영역을 설정한다. 다음 루프를 실행할 때는 이 영역을 제외한다.
6. 비교 대상이 없을 때까지 1~5번 과정을 반복
대상 데이터에서 최대나 최소 데이터를 데이터가 나열된 순으로 찾아가며 선택하는 방법이다.
선택 정렬은 구현 방법이 복잡하며, 시간 복잡도도 O(n^2)로 효율적이지 않아 코팅테스트에서는 많이사용되지 않는다
선택정렬은 최솟값 또는 최댓값을 찾고, 남은 정렬 부분의 가장 앞에 있는 데이터와 swap하는것이 선택정렬의 핵심이다/
선택 정렬 과정
1. 남은 정렬부분에서 최소값 또는 최대값을 찾는다.
2. 남은 정렬 부분에서 가장 앞에 있는 데이터와 선택된 데이터를 swap 한다.
3. 가장 앞에 있는 데이터의 위치를 변경해 남은 정렬 부분의 범위를 축소한다.
4. 전체 데이터 크기만큼 index가 커질때 까지, 즉 남은 정렬 부분이 없을때 까지 반복한다.