정렬이란?
- 임의로 정렬된 배열의 객체들을 오름차순으로 재배열하는 법
삽입 정렬
- 첫 번째 원소에서 시작한다.
- 배열의 다음 원소가 첫 번째 값보다 작다면 바꾼다 (1 <-> 2)
- 세 번째 원소에 대해 비교해보고 작다면 바꾼다.
#include <iostream>
using namespace std;
void insertionSort(char* A, int n)
{
for (int i = 1; i < n; i++)
{
char cur = A[i];
int j = i - 1;// j는 i -1에서 시작해서 0번까지 순회한다.
// A[i-1] > A[i] = chArr[0] > chArr[1]
while ((j >= 0) && (A[j] > cur))
{
A[j + 1] = A[j];// chArr[1] = chArr[0]
j--;
}
// chArr[1] + chArr[1]
A[j + 1] = cur;// j가 변하면 그제서야 의미를 가짐
}
// A[i]에 있는 값과 A[i-1]을 비교하며 A[i]가 A[i-1]보다 작다면 덮어쓴다
// while문 내부에 j--을 통해 0으로 향해 가는 여정을 반복하고 (계속 덮어쓰며)
// 자신의 위치를 찾았으면 맨 처음에 저장해두었던 i번째에 있던 요소를
// j가 맞는 위치에 (while 탈출 시) A[j + 1]에 집어넣는다.
}
- "zzzzzzza"라는 문자열이 있는 경우,
- 맨 후열의 a를 찾을 때까지 탐색하며, a를 찾은 경우
- a를 cur(A[i])에 저장하고
- while문을 통해 a[i-1]를 비교하여 a를 z로 덮어씌우며 0번 인덱스를 향해 후진한다.
- 1번째 행도 cur보다 클 경우 j--에 의해 j는 -1이 되고 while문을 탈출하며
- A[j+1] = A[0]에 cur('a')을 집어넣게 된다.
'자료구조와 알고리즘 > [서적]C++로 구현하는 자료구조와 알고리즘' 카테고리의 다른 글
3장-4. 일반적인 링크드 리스트 구현 (단일, 이중, 환형) (0) | 2022.09.12 |
---|---|
3장-3. 단일 링크드 리스트 (String 버전) (0) | 2022.09.11 |
3장-2. 2차원 배열과 위치 게임 (0) | 2022.09.11 |
3장. 배열, 링크드 리스트, 그리고 재귀 (0) | 2022.09.05 |
2장. 객체지향 설계 - 목표와 원리, 그리고 패턴 (0) | 2022.09.05 |
댓글