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

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем itup, 4 янв 2015.

  1. itup

    itup Постоялец

    Регистр.:
    8 окт 2007
    Сообщения:
    68
    Симпатии:
    47
    Всем привет и спасибо за помощь. В двух словах мне необходимо на Си решить задачку по сортировкам методом слияния (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];
        }
    }
    

    Подскажите кто-то в чем у меня ошибка
     
  2. itup

    itup Постоялец

    Регистр.:
    8 окт 2007
    Сообщения:
    68
    Симпатии:
    47
    Сам решил:
    Код:
    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];
        }
    }