Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(С++) Прямое слияние

14K
17 марта 2007 года
demonoide
30 / / 11.02.2007
Задача поставлена так. Отсортировать текстовый файл, методом прямого слияния.

Ни у кого этого метода на C++\C нету случайно? Алгоритм немного знаю, но реализовать проблемно...

Требуется только код сортировки методом прямого слияния на C\C++.
9
17 марта 2007 года
Lerkin
3.0K / / 25.03.2003
http://www.codenet.ru/progr/alg/qsort.php, 3-я часть. правда, на паскале.
И это не подойдет?
14K
18 марта 2007 года
demonoide
30 / / 11.02.2007
Видели всё это... не то, то что на паскале - то, но надо на Си!
9
18 марта 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: demonoide
Видели всё это... не то, то что на паскале - то, но надо на Си!


Так на С или С++? Разные вещи, собственно.

14K
24 марта 2007 года
demonoide
30 / / 11.02.2007
Всё равно, и так и так пойму! Ну раз я написал в сабже на С++, значит лучше на С++.
320
24 марта 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: demonoide
Ни у кого этого метода на C++\C нету случайно? Алгоритм немного знаю, но реализовать проблемно...
Требуется только код сортировки методом прямого слияния на C\C++.


Если нужен только код вот в Visual Studio 2003:

Код:
#include "stdafx.h"
#include <iostream>
#include <ctime>

using namespace std;

template<class T>
void Sort(T a[], long lb, long ub)
{
  long splitter;
  if (lb < ub) {
    splitter = (lb + ub)/2;
    Sort(a, lb, splitter);
    Sort(a, splitter+1, ub);
    //слияние результатов в общий массив
    merge(a, lb, splitter, ub);
  }
}
template<class T>
void merge(T a[], long lb, long split, long ub)
{
  long pos1=lb;
  long pos2=split+1;
  long pos3=0;  
  T *temp = new T[ub-lb+1];
  while (pos1 <= split && pos2 <= ub)
  {
    if (a[pos1] < a[pos2])
      temp[pos3++] = a[pos1++];
    else
      temp[pos3++] = a[pos2++];
  }
  while (pos2 <= ub)
    temp[pos3++] = a[pos2++];
  while (pos1 <= split)
    temp[pos3++] = a[pos1++];
  for (pos3 = 0; pos3 < ub-lb+1; pos3++)
    a[lb+pos3] = temp[pos3];
  delete[] temp;
}

int _tmain(int argc, _TCHAR* argv[])
{
    srand(time(0));
    int size;
    cout<<"Input size of array"<<endl;
    cin>>size;
    int *mass = new int[size];
    for(int i = 0;i<size;++i)
        mass = rand() % 100;
    cout<<endl;
    cout<<"\tArray"<<endl;
    for(int i = 0;i<size;++i)
        cout<<mass<<' ';
    Sort(mass,0,size-1);
    cout<<endl;
    cout<<"\tArray after sorting"<<endl;
    for(int i = 0;i<size;++i)
        cout<<mass<<' ';
    cout<<endl;
    delete[] mass;
    return 0;
}

Если алгоритм знаешь - разберешься.
14K
25 марта 2007 года
demonoide
30 / / 11.02.2007
СПАСИБО!!!!!!!!!!!!!!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог