Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Zyava



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

/***********************************************************************
This code is generated by the AlgoPascal translator
 
This code is distributed under the ALGLIB license
    (see http://www.alglib.net/copyrules.php for details)
***********************************************************************/
 
#include "ap.h"
 
void neumansort(ap::real_1d_array& arr, int n);
 
/*************************************************************************
Процедура для сортировки массива методом фон Неймана (слияний)
 
Входные параметры:
    Arr -   сортируемый массив.
            Нумерация элементов от 0 до N-1
    N   -   размер массива
 
Выходные параметры:
    Arr -   массив, упорядоченный по возрастанию.
            Нумерация элементов от 0 до N-1
*************************************************************************/
void neumansort(ap::real_1d_array& arr, int n)
{
    bool c;
    int i;
    int i1;
    int i2;
    int n1;
    int n2;
    int j;
    int k;
    double tmp;
    ap::real_1d_array barr;
    int mergelen;
 
    barr.setbounds(0, n-1);
    mergelen = 1;
    c = true;
    while(mergelen<n)
    {
        if( c )
        {
            i = 0;
            while(i+mergelen<=n)
            {
                i1 = i+1;
                i2 = i+mergelen+1;
                n1 = i+mergelen;
                n2 = i+2*mergelen;
                if( n2>n )
                {
                    n2 = n;
                }
                while(i1<=n1||i2<=n2)
                {
                    if( i1>n1 )
                    {
                        while(i2<=n2)
                        {
                            i = i+1;
                            barr(i-1) = arr(i2-1);
                            i2 = i2+1;
                        }
                    }
                    else
                    {
                        if( i2>n2 )
                        {
                            while(i1<=n1)
                            {
                                i = i+1;
                                barr(i-1) = arr(i1-1);
                                i1 = i1+1;
                            }
                        }
                        else
                        {
                            if( arr(i1-1)>arr(i2-1) )
                            {
                                i = i+1;
                                barr(i-1) = arr(i2-1);
                                i2 = i2+1;
                            }
                            else
                            {
                                i = i+1;
                                barr(i-1) = arr(i1-1);
                                i1 = i1+1;
                            }
                        }
                    }
                }
            }
            i = i+1;
            while(i<=n)
            {
                barr(i-1) = arr(i-1);
                i = i+1;
            }
        }
        else
        {
            i = 0;
            while(i+mergelen<=n)
            {
                i1 = i+1;
                i2 = i+mergelen+1;
                n1 = i+mergelen;
                n2 = i+2*mergelen;
                if( n2>n )
                {
                    n2 = n;
                }
                while(i1<=n1||i2<=n2)
                {
                    if( i1>n1 )
                    {
                        while(i2<=n2)
                        {
                            i = i+1;
                            arr(i-1) = barr(i2-1);
                            i2 = i2+1;
                        }
                    }
                    else
                    {
                        if( i2>n2 )
                        {
                            while(i1<=n1)
                            {
                                i = i+1;
                                arr(i-1) = barr(i1-1);
                                i1 = i1+1;
                            }
                        }
                        else
                        {
                            if( barr(i1-1)>barr(i2-1) )
                            {
                                i = i+1;
                                arr(i-1) = barr(i2-1);
                                i2 = i2+1;
                            }
                            else
                            {
                                i = i+1;
                                arr(i-1) = barr(i1-1);
                                i1 = i1+1;
                            }
                        }
                    }
                }
            }
            i = i+1;
            while(i<=n)
            {
                arr(i-1) = barr(i-1);
                i = i+1;
            }
        }
        mergelen = 2*mergelen;
        c = !c;
    }
    if( !c )
    {
        i = 1;
        do
        {
            arr(i-1) = barr(i-1);
            i = i+1;
        }
        while(i<=n);
    }
}

Всего записей: 324 | Зарегистр. 04-05-2006 | Отправлено: 23:33 28-02-2007 | Исправлено: Zyava, 23:37 28-02-2007
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru