기본 정렬 알고리즘 - 병합 정렬

병합 정렬

  • 1 알고리즘 사상
  • 2 코드 구현
  • 3 알고리즘 분석

  • 1 알고리즘 사상


    수조를 중간에서 두 개의 서브수조로 나누고, 줄곧 귀속된 서브수조를 더 작은 서브수조로 나누며, 서브수조 안에 원소가 하나밖에 없을 때까지.차례대로 돌아오는 순서에 따라 순서를 배열한 하위 그룹을 끊임없이 합병하여 마지막에 전체 그룹의 순서를 배열한다.

    2 코드 구현

    public class MergeSort {
    
        public static void main(String[] args) {
            int[] nums = new int[]{9,8,7,6,5,4,3,2,1};
            sort(nums,0, nums.length - 1);
            System.out.println(Arrays.toString(nums));
        }
    
        public static void sort(int[] nums, int lo, int hi) {
            if (lo >= hi) { //  
                return;
            }
    
            int mid = lo + (hi - lo) / 2; //  
    
            sort(nums, lo, mid); //  
            sort(nums, mid + 1, hi); //  
    
            merge(nums, lo, mid, hi);
        }
    
        public static void merge(int[] nums, int lo, int mid, int hi) {
            int[] copy = nums.clone();
    
            int k = lo, i = lo, j = mid + 1; // i ,j 
    
            while (k <= hi) {
                if (i > mid) { //  , copy 
                    nums[k++] = copy[j++];
                } else if (j > hi) { //  , copy 
                    nums[k++] = copy[i++];
                } else if (copy[j] < copy[i]) { //  
                    nums[k++] = copy[j++];
                } else { //  
                    nums[k++] = copy[i++];
                }
            }
    
    
        }
    
    }
    
    

    3 알고리즘 분석


    시간 복잡도: O(nlogn) 공간 복잡도: O(n). n개의 원소를 합병하려면 n의 크기를 가진 추가 수조를 분배해야 하기 때문에 합병이 완료되면 이 수조의 공간이 방출됩니다.

    좋은 웹페이지 즐겨찾기