인접한 두 원소를 순서대로 보면서 정렬해 나가는 알고리즘
오름차순으로 정렬한다고 가정,
1. A[i] 와 A[i+1]을 비교
2. A[i] > A[i+1]이면, A[i], A[i+1]을 교환(swap)
버블 정렬은 순회를 N-1번 반복한다.
*순회란? i=1..N-1까지 순서대로 한번 수행하는 것(N은 배열의 길이)
길이가 N인 배열을 한번 순회할 때,
i번째, 순회에서 i번째로 큰 값이 뒤에서 i번째 위치로 이동한다.
순회를 N-1번 반복하면 모든 수가 올바른 위치로 이동한다.
(N-1)^이므로 시간복잡도는 O(N^2)
적절한 위치에 원소를 옮김(삽입함)으로써 정렬해 나가는 알고리즘
i=2...N인 i에 대해서 순서대로 다음과정을 수행한다.
평균적으로, i번째 작업에서 A[i]를 i/2번째 위치로 옮기는 경우
i번째 작업에서 O(N)의 시간이 걸린다고 할 수 있다.
작업을 N번 수행해야 하므로 시간복잡도는 O(N^2)
재귀적으로 정렬을 수행하는 알고리즘
sort(int A[])
1. 배열 A의 길이가 0 또는 1이면, 이미 정렬된 배열이므로 함수 종료
2. 배열 A에 있는 아무 원소를 pivot으로 잡는다.

시간복잡도는 O(NlogN)

시간복잡도는 O(N^2)
재귀적으로 정렬을 수행하는 알고리즘
sort(int A[])
1. 배열 A의 길이가 0 또는 1이면, 이미 정렬된 배열이므로 함수 종료
2. 배열 A를 다음 두 배열로 나눈다.

퀵정렬의 best 경우와 동일하다.
시간복잡도는 O(NlogN)
하나의 데이터 뒤에 하나의 데이터만 올 수 있는 데이터 구조
*비선형 자료 구조란? 하나의 데이터 뒤에 여러 데이터가 올 수 있는 데이터 구조
자료가 물리적으로 연속(= 메모리상에서 연속)되어 저장되는 자료구조
자료가 논리적으로 연속(= 메모리 상에서 연속되어 있지 않음)되어 저장되는 자료구조
노드는 데이터와 자신과 인접한 노드의 주소를 저장한다.
나중에 들어온 자료가 먼저 나온다.
먼저 들어온 자료가 먼저 나간다.
→ 효율적인 구현은 연결리스트로 가능하다.
LIFO, FIFO를 모두 지원하는 자료구조
→ 구현은 Doubly Linked List를 사용하고, 맨앞/맨뒤 원소를 저장해두면 된다.