티스토리 뷰

유니티에서 사용할 머지 정렬을 만들었는데

확실히 c#용은 아닌 녀석임...

스테이블 정렬을 하기 위해서 일단은 쓰겠지만 앞으로 문제가 생길지도!

후우... 일단은 기록을 위해 포스팅합니다.

개선점 적어주시면 너무 감사감사..

Vector2Int를 쓴 이유는

int값 두개를 가지고 x를 기존 인덱스를 1,2,3,4... 쭉 넣어주고

y값에 비교할 밸류를 넣는 방식으로 하는데 Vector2int라고 하는 편리한 녀석을 안 쓸 이유가 없어서 활용해봤다.

 

        public static void Merge(Vector2Int[] arr, int left, int right, E_SortType sortType)
        {
            // 임시 메모리 만들기 
            Vector2Int[] arr2 = (Vector2Int[])arr.Clone();

            // 필요한 변수 선언
            int mid = (left + right) / 2; // 
            int low = left;
            int high = mid + 1;
            int key = left;
            while (low <= mid && high <= right)
            {
                if ((sortType == E_SortType.ascending && arr[low].y <= arr[high].y) || (sortType == E_SortType.descending && arr[low].y >= arr[high].y))
                {
                    arr2[key++] = arr[low++];
                }
                else
                {
                    arr2[key++] = arr[high++];
                }

            }

            int tmp = low > mid ? high : low;

            while (key <= right)
            {
                arr2[key++] = arr[tmp++];
            }

            for (int i = left; i <= right; i++)
            {
                arr[i] = arr2[i];
            }
        }

        public static void Sort(Vector2Int[] arr, int left, int right, E_SortType sortType)
        {
            int mid;
            if (left < right)
            {
                mid = (left + right) / 2;
                Sort(arr, left, mid,sortType);
                Sort(arr, mid + 1, right, sortType);
                Merge(arr, left, right, sortType);
            }
        }
댓글
최근에 올라온 글
Total
Today
Yesterday
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31