정렬(Sort)를 할 때 가장 기초적으로 생각할 수 있는 것은 "오른쪽부터 제일 큰 수를 차근차근 쌓아올리겠다" 입니다.
왼쪽을 기준으로 숫자를 세어나가면서 큰 수를 만나면 바로 오른쪽으로 밀어버리면서 정렬을 진행하는 것입니다.
즉, 오른쪽 기준점에 가장 큰 수 i를 두겠다는 목표를 두고 j가 0부터 i가 있는 지점(i-1)까지 하나하나씩 바로 오른쪽에 숫자와 비교를 하여 큰 수를 오른쪽에 두면 됩니다. 그렇게 하면 결국 j가 0에서 i-1이 되었을 때에는 i번째와 비교하면서 i번째까지 중에 가장 큰 수를 오른쪽에 둘 수 있게 됩니다.
j가 0에서부터 i-1까지 한 번 가면 기준점 i에 가장 큰 수가 배치되게 됩니다. 그 다음에는 기준점 i의 다음점 i+1에 가장 큰 수를 찾아야 되고, j는 0에서부터 i-2까지 가게 되고, i+1은 오른쪽 기준으로 두번재로 가장 큰 수가 됩니다.
그러면 식은 아래와 같게 됩니다. 여기서 중요한 점은 i가 0인 이유는 i가 오른쪽 기준으로 카운트가 올라간다는 점입니다.
for (int i=0; i < n-1; i++){
for(j=0; j<n-i-1; j++){
if(arr[j] > arr[j+1]){
swap(&arr[j], &arr[j+1]);
}
}
}
i가 하나씩 늘어가는 부분을 잘 보면 달팽이 집이 커가는 것과 비슷합니다.
'프로그래밍 일반 > 알고리즘' 카테고리의 다른 글
[백준2579] 계단 오르기 (0) | 2019.12.05 |
---|---|
[알고리즘] BFS와 DFS 쉽게 이해하기 (0) | 2019.11.17 |
[알고리즘] 선택정렬 쉽게 생각하기 (0) | 2019.11.09 |
[알고리즘] 삽입정렬 쉽게 생각하기 (0) | 2019.11.09 |
[알고리즘] 알고리즘에서 배워야 할 기초 (0) | 2019.11.02 |