1. Bubble Sort

2. Selection Sort

3. Insertion Sort

( 처음부터 비교를 해서 빼서 맞게 넣어줌 )

4. Magic Square

5. 마방진 (3 x 3) → 5 →7

1. Bubble Sort

서로 인접한 두 원소를 검사하여 정렬하는 알고리즘

→ **인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환**한다.
	큰 값이 거품처럼 점점 떠밀려 내려가는 방식. 
	( 첫 번째 데이터를 오른쪽과 비교 후 크면 다시 바뀐 자리에서부터 오른쪽고 비교 후 
			끝까지 왔으면 멈춘다. )

-> **자연수** : 1이상의 정수(1,2,3,4,5...)
-> **정수** : 음의정수, 0, 양의 정수로 이루어진 수(-1,-2,-3...0...1,2,3...)

	1. 이걸, i번 실행(i는 정렬이 완료된 값)
	2. 인접한 두개의 값을 배열의 끝 -1까지 비교하여 자리 변경(j, j+1)

Untitled

// 인접한 두개의 값을 비교
        static void BubbleSort(int[] arr)
        {
            // i = 배열에서 정렬된 값의 개수
            // j = 정렬 시키기 위한 위치 정보
            // 1. 인접한두개 비교
            // 2. 값 변경
            // 3. 언제까지? 배열의 끝까지

            // i : 0 // 정렬이 하나도 안됨
            // i : 1 // 1개의 값이 정렬이 됨
            // i : 2 // 2개의 값이 정렬이 됨
            for (int i = 0; i < arr.Length; i++) 
            {
                // j = 배열값 비교
                //arr.Length -1 -i인 이유
                // -1 : j + 1 값을 사용하기 때문에 길이 초과가 나타남
                // -i : i 만큼의 값이 이미 정렬됐기 때문에 해당 데이터는 비교하지 않아도 됨.
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                    if (arr[j] > arr[j+1])
                    {
                        int tmp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = tmp;
                    }
                }
            }
        }

2. Selection Sort

최소값의 위치를 구한다 (값을 바꾸기 위하여)

제자리 정렬(in-place sorting) 알고리즘의 하나
	→ 입력 배열(정렬되지 않은 값들) 이외에 다른 추가 메모리를 요구하지 않는 정렬 방법
		**해당 순서에 원소를 넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택하는 알고리즘**
	→ 첫번째 순서에는 **첫번째 위치에 가장 최솟값을 넣는다.**
	→ 두번째 순서에는 **두번째 위치에 남은 값 중에서의 최소값을 넣는다.

// 1. i부터 배열의 끝까지 최소값의 위치(min)를 구한다. (값을 바꾸기 위해서)
// 2. i번째 값을 min번째 값을 변경**