Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
#1

Сортировка слиянием в С++ - C++

30.11.2011, 21:33. Просмотров 2621. Ответов 5
Метки нет (Все метки)

Вот такое задание:
Составить программу реализации указанного метода сортировки и иллюстрации его выполнения. В программе предусмотреть просмотр входных и выходных данных и пошаговое перемещение элементов в соответствии с алгоритмом.
Для получения входных данных иметь три варианта:
a) непосредственный ввод и запись в текстовый файл;
b) генерирование с помощью датчика случайных чисел и запись в текстовый файл;
c) ввод из текстового файла
у меня в программе должна быть сортировка слиянием
vb.net
1
http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D0%B5%D0%BC
помогите откорректировать программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream> 
#include <cmath> 
#include <stdio.h> 
#include <time.h> 
using namespace std; 
template <typename Item>
void Merge(Item Mas[], int left, int right, int medium)
{         
    int j = left;
    int k = medium + 1;
    int count = right - left + 1;
    if (count <= 1) return;
    Item *TmpMas = new Item[count];
    for (int i = 0; i < count; i++)
    {
        if (j <= medium && k <= right)
        {
            if (Mas[j] < Mas[k]) 
                TmpMas[i] = Mas[j++];
            else 
                TmpMas[i] = Mas[k++];
        }
        else
        {
            if (j <= medium) 
                TmpMas[i] = Mas[j++];
            else 
                TmpMas[i] = Mas[k++];
        }
    }
    j = 0;
    for (int i = left; i <= right; i++)
    {
        Mas[i] = TmpMas[j++];
    }
    delete[] TmpMas;
}
FILE *t; 
int i,n,b,c; 
int *a; 
int main() 
{ 
    cout<<"Varianti vvoda (1 klava, 2 random, 3 iz faila)"<<endl; 
    cin>>c; 
    if (c==1) 
    { 
        cout<<"Chislo elementov massiva"<<endl; 
        cin>>n; 
        a= new int[n]; 
        cout<<"Vvod massiva"<<endl; 
        for (i=0;i<n;i++) 
            cin>>a[i]; 
        t=fopen("inoutput.txt","w"); 
        fprintf(t,"%d",n); 
        fprintf(t,"%s","\n"); 
        for (i=0;i<n;i++) 
        { 
            fprintf(t,"%d",a[i]); 
            fprintf(t,"%s"," "); 
        } 
        Merge(a,n); 
        for (i=0;i<n;i++) 
            cout<<a[i]<<" "; 
        fclose(t); 
    } 
    if (c==2) 
    { 
        cout<<"Kol-vo elementov massiva"<<endl; 
        cin>>n; 
        a= new int[n]; 
        for (i=0;i<n;i++) 
            a[i]=rand()%100; 
        cout<<endl; 
        for (i=0;i<n;i++) 
            cout<<a[i]<<" "; 
        cout<<endl; 
        t=fopen("inoutput.txt","w"); 
        fprintf(t,"%d",n); 
        fprintf(t,"%s","\n"); 
        for (i=0;i<n;i++) 
        { 
            fprintf(t,"%d",a[i]); 
            fprintf(t,"%s"," "); 
        } 
        Merge(a,n); 
        for (i=0;i<n;i++) 
            cout<<a[i]<<" "; 
        fclose(t); 
    } 
    if (c==3)
    {
        FILE* in;
        int ch;
        if ((in=fopen("inoutput.txt", "r"))!=NULL)
        {
            fscanf(in, "%5d", &ch);
            if (feof(in))
                printf("Pusto\n");
            else
         {
             n=0;
             fseek(in, 0, SEEK_SET);
             while (!feof(in))
             {
                 fscanf(in, "%5d", &ch);
                 n++;
             }
             a=new int[n];
             int t=0;
             fseek(in, 0, SEEK_SET);
             cout<<"massiv:\n";
             while (!feof(in))
             {
                 fscanf(in, "%5d", &ch);
                 a[t]=ch;
                 t++;
             }
             t--;
             for(i=0;i<t;i++)
                 cout<<a[i]<<" ";
             cout<<endl;
             Merge(a,t);
             for(i=0;i<t;i++)
                 cout<<a[i]<<" ";
         }
        }
        else
            cout<<"Nety faila";
        cout<<endl;
        for(int l=0;l<i;l++)
            cout<<a[l]<<" ";
        cout<<endl;
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2011, 21:33     Сортировка слиянием в С++
Посмотрите здесь:

Сортировка слиянием С++ - C++
Помогите пжлст написать программу со слиянием. Например вводим массивы A=1 2 3 и B= 4 5 6 и получить результат 1 2 3 4 5 6

Сортировка слиянием - C++
Нужно сделать счётчик который будет считать количество приравниваний в программе. Я что-то никак не могу сообразить( #include&lt;stdio.h&gt;...

Сортировка слиянием - C++
Всем доброго время суток, дана задача: Требуется упорядочить элементы некоторого массива целых чисел, который следует упорядочить по...

Сортировка слиянием - C++
Даны два текстовых файла f1.txt и f2.txt, состоящие из целых чисел, которые упорядочены по неубыванию. Числа лежат в диапозоне от 0 до 9....

Сортировка слиянием - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void Merge_Sort(int * a,int left, int right) { if (left &lt;...

Сортировка слиянием - C++
Здравствуйте, изучая сортировку, в интернете наткнулся на код сортировки слиянием. int a; void merge(int,int,int); void...

Сортировка с слиянием - C++
Добрый вечер! Помогите с подсчетом перестановок и сравнений при сортировке с слиянием. Вот нашел код, и ищу легкий способ чтоб посчитать,...

Сортировка слиянием c++ - C++
Необходимо слить 2 упорядоченных по не возрастанию списка в один, так же упорядоченный по не возрастанию , построив новый список. с++ ...

Сортировка слиянием? - C++
Условие задачи &quot;Элементы файлов f1 и f2 упорядочены по не убыванию. Объединить эти элементы в один файл f3, также упорядоченный по не...

Сортировка слиянием - C++
void merg1(int* mas, int p, int q, int r) { int size1 = p + q; int size2 = r - q + 1; int *mas1 = new int; int *mas2 = new...

Сортировка слиянием - C++
Добрый вечер. C си начал совсем недавно работать, до этого был паскаль, делфи. Есть рабочий код на паскале, прошу помочь разобраться в чем...

Сортировка слиянием - C++
Нужен алгоритм сортировки массива слиянием. Массив из 1000 чисел, введенных рандомно. На visual c++ заранее большое спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
04.12.2011, 19:16  [ТС]     Сортировка слиянием в С++ #2
посмотрите пожалуйста

Добавлено через 20 часов 42 минуты
может быть я саму сортировку неправильно реализовал?

Добавлено через 2 часа 20 минут
Merge(a,n); выдает ошибку на этом
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.12.2011, 19:19     Сортировка слиянием в С++ #3
Алексей_123, есть встроенная функция в
C++
1
#include <algorithm>
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
04.12.2011, 19:23  [ТС]     Сортировка слиянием в С++ #4
какая функция?
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
04.12.2011, 19:31     Сортировка слиянием в С++ #5
Цитата Сообщение от Алексей_123 Посмотреть сообщение
какая функция?
C++
1
stable_sort()
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
04.12.2011, 19:34     Сортировка слиянием в С++ #6
Алексей_123, http://www.cplusplus.com/reference/algorithm/merge/
Yandex
Объявления
04.12.2011, 19:34     Сортировка слиянием в С++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru