Несколько задач по Си (mergesort)

itup

Постоялец
Регистрация
8 Окт 2007
Сообщения
94
Реакции
66
Всем привет и спасибо за помощь. В двух словах мне необходимо на Си решить задачку по сортировкам методом слияния (mergesort). Суть такова что надо вначале написать функцию merge() и потом нав основе ее написать саму задачку mergesort.
Код:
void merge(int array[], int lo, int mid, int hi) {
    int i, m, k, l;
    int temp[hi];
  
    l = lo;
    i = lo;
    m = mid + 1;
    for ( ; l <= mid && m <= hi; i++ ) {
        if ( array[l] <= array[m] ) {
            temp[i] = array[l];
            l += 1;
        } else {
            temp[i] = array[m];
            m += 1;
        }
    }
  
    if ( l > mid ) {
        for ( k = m; k <= hi; k++, i++ ) {
            temp[i] = array[k];
        }
    } else {
        for ( k = l; k <= mid; k++, i++ ) {
            temp[i] = array[k];
        }
    }
  
    for ( k = lo; k <= hi; k++ ) {
        array[k] = temp[k];
    }
}

Подскажите кто-то в чем у меня ошибка
 
Сам решил:
Код:
void merge(int array[], int lo, int mid, int hi) {
    int temp[hi];
    int k = lo;
    int i = lo;
    int j = mid;
  
    for ( ; i < mid && j < hi; k++ ) {
        if ( array[i] <= array[j] ) {
            temp[k] = array[i];
            i += 1;
        } else {
            temp[k] = array[j];
            j += 1;
        }
    }
    for ( ; i < mid; k++, i++ ) {
        temp[k] = array[i];
    }
    for ( ; j < hi; k++, j++ ) {
        temp[k] = array[j];
    }
    for ( int i = lo; i < hi; i++ ) {
        array[i] = temp[i];
    }
}
 
Назад
Сверху