2012-09-17 3 views
1

나는 어떤 종류의 정렬이 아래의 정렬인지, 그리고 큰 O 표기법에서의 실행 시간은 어떨까 궁금합니다. 내 친구는 알고리즘에 대한 지식없이이 정렬 함수를 작성했으며 이제 우리는 얼마나 빨리/효율적으로 메모리가 효율적인지에 관해 논쟁 중입니다. 그러니 제발요, 분석을 도와주세요. 어떤 종류의 정렬입니까? 실행 시간은 어떻게됩니까?

void sort(int* a, int size) 
{ 
    if (size <= 1) return; 
    else if (size == 2) 
    { 
     if (a[0] > a[1]) 
      swap (a[0], a[1]); 
     return; 
    } 
    else 
    { 
     int i = size/2; 
     sort(a, i); 
     sort(a+i, size - i); 
     int j = 0, k = i ; 
     while (k < size && j < k) 
     { 
      if (a[j] > a[k]) 
      { 
       int temp = k; 
       while (temp > j) 
       { 
        swap(a[temp - 1], a[temp]); 
        temp--; 
       } 
       k++; 
      } 
      j++; 
     } 
    } 
} 

은 머지 소트 기본적으로 사용자들은

+3

숙제 문제입니까? –

+0

mergesort와 비슷하게 보이고 삽입 정렬이 뒤 따름 –

+0

아니요, 숙제 문제가 아닙니다. 내 친구는 어디서든지 보지 않고 mergesort를 작성하려고 시도했고 이것들을 생각해 낸다. –

답변

2

을 :) 감사하지만, N^2-장소 병합 단계로. mergesort를 분석하는 것처럼 표준 수학을 수행하면 n^2 실행 시간이 있음을 발견해야합니다. 이를 수행하기 위해 풀어야 할 관련 방정식은 f(n) = n^2 + 2f(n/2)입니다.

+1

방정식의 해는 O (n^2 log n)이 아닌 f (n) = O (n^2)이다. – krjampani

+0

아, 루키 실수. 결정된. –

관련 문제