카테고리 없음

25.02.05(수) - 본 캠프 TIL 13일차 (Today I Learned)

rxo2 2025. 2. 5. 20:57

static void Swap(int[] arr, int i, int j)
{
    int temp = arr[i]; arr[i] = arr[j];
    arr[j] = arr[j];
    arr[j] = temp;
} // 공간을 하나 더놓고 삼각형으로 정보 교환을한다

 

퀵 정렬 ( Quick Sort )

int[] arr = new int[] { 5, 2, 4, 6, 1, 3 };

QuickSort(arr, 0, arr.Length - 1);

- arr.Length → 배열 요소 개수
- arr.Length - 1 → 배열의 마지막 인덱스
- QuickSort(arr, 0, arr.Length - 1) → 배열 전체를 정렬

 

arr.Length - 1 이 항상 배열 전체를 정렬 하는건 아니다

 

int[] arr = { 10, 20, 30, 40, 50 };

Console.WriteLine(arr[arr.Length - 1]); // 마지막 요소 출력

-  arr.Length - 1은 마지막 요소(50)를 가져오는 용도
- 정렬과는 관련 없음

 

static int Partition(int[] arr, int left, int right) // 배열중 left는 왼쪽끝의 인덱스번호 0 이며 right 는 마지막 번호 인덱스 5이다
{ // { 5, 2, 4, 6, 1, 3 }; 예시 배열들
    int pivot = arr[right]; // right = 3
    int i = left - 1; // left = 0 - 1 = - 1

    for (int j = left; j < right; j++) // 0번부터 5번자리가 오기전 즉 4번위치까지 비교
    {
        if (arr[j] < pivot) // pivot = 3 이 j 보다 작으면 i를 증가시켜라 > 5, 2, 4, 6, 1, 3 > 2,5,4,6,1,3(Swap) > 2,1,4,6,5,3(Swap) 반복끝
        { // Swap 이발생하면 j 의 위치는 Swap 이 발생한 그위치에서 재 비교
            i++; 
            Swap(arr, i, j);
        }
    }
    Swap(arr, i + 1, right);
    // 반복문이 종료시 i + 1을 해라(i는 -1 이였지만 스왑을 2번진행(i++로 인해 2증가 = 1), +1을 하면 2, 즉 2번자리 인덱스(4)와right 3의 자리를 바꿔라)
    return i + 1; // 그럼 2,1,3,6,5,4 , pivot 으로 기준은 잡은수 3을 기준으로 왼쪽은 기준보다 낮은수 오른쪽은 큰수로 빠르게 정렬 이게 파티션
}

 

C# Sort  // .Sort 메서드를 이용하여 정렬을 할수도 있다

int[] numbers = { 5, 2, 8, 3, 1, 9, 4, 6, 7 };

Array.Sort(numbers);

Console.WriteLine(string.Join(", ", numbers));

 

List<string> names = new List<string> { "John", "Alice", "Bob", "Eve", "David" };

names.Sort();

Console.WriteLine(string.Join(", ", names));

 

그래프 이해도 - 각 Vertex 숫자끼리 연결 되어있음