何も見ないで書いてみた(マージソート)(2007/07/23(月) 23:57:46)

何も見ないでマージソートを書いてみた。
初め

int *tmp = new int[num];

で、マージするための領域用意したのに

if(j >= num || (i < left && array[i] < array[j]))array[k++] = array[i++]; 
else array[k++] = array[j++];

と書いていて、tmpのコピーも開放も忘れていた・・・。
必殺!!バグの嵐・・・

ソース

void mergeSort(int *array, int num){ 
  if(num == 1)return; 
  if(num == 2){ 
    if(array[0] > array[1]){ 
      int tmp = array[0]; 
      array[0] = array[1]; 
      array[1] = tmp; 
    } 
    return; 
  } 

  int left = num / 2; 
  int right = num - left; 

  mergeSort(array, left); 
  mergeSort(array + left, right); 

  int *tmp = new int[num]; 
  int i = 0, j = left, k = 0; 
  while(i < left || j < num){ 
    if(j >= num || (i < left && array[i] < array[j]))tmp[k++] = array[i++]; 
    else tmp[k++] = array[j++]; 
  } 
  memcpy(array, tmp, sizeof(int) * num); 
  delete tmp; 
}

参考

俺の頭の中