Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разбить строку http://www.cyberforum.ru/cpp-beginners/thread214539.html
Просьба написать программу на С++ , которая разбивает строку длинной в 200 символов на строки по 20.
C++ Дана строка, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи целого числа. #include <iostream.h> #include <string.h> int main() { char st,st2; int i,j; cout << "Vvedite stroku"; cin >> st; int n=strlen(st); http://www.cyberforum.ru/cpp-beginners/thread214531.html
C++ Не видит класс итераторов
Предметная область: Множество натуральных чисел, Реализованное через Хеш таблицы С цепочками. В классе "myhash" не воспринимается класс "it_hash" а точнее не воспринимается функция it_hash...
error C2059: синтаксическая ошибка C++
Добрый день. Собственно, проблема вот в чем. Класс ContStack является наследником чисто виртуалього интерфейса NVICont. При компиляции в месте "Arg<T>* _p;" выдает ошибку: error C2059:...
C++ MDI запретить создание одного и того же документа http://www.cyberforum.ru/cpp-beginners/thread214515.html
Как запретить создание одного и того же документа в MDI-интерфейсе. (то есть документа одного и того же типа)? И если такой документ создан, перекидывать фокус на него?
C++ функция, суммирует матрицы можно ли организовать её в таком виде? int normsumm(int *perv, int *vtor, int razm) { int *ps, summ; ps=summ; for (int i;i<razm*razm;i++) { ... подробнее

Показать сообщение отдельно
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670

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

19.12.2010, 13:39. Просмотров 4914. Ответов 9
Метки (Все метки)

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

Файл MergeSort.h
C++
1
2
3
4
5
6
7
8
9
10
#ifndef __MERGE_SORT_H__
#define __MERGE_SORT_H__
 
// Включить печать отладочных сообщений.
#define DEBUG_ECHO 1
 
// Сортировка слиянием
void MergeSort(int array[], int N);
 
#endif
Файл MergeSort.cpp
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
#include <assert.h>
 
#include "MergeSort.h"
 
#ifdef DEBUG_ECHO
#include <iostream>
using namespace std;
#endif
 
void Merge(int array[], int first, int middle, int last, int temp[]) {
    int idx = first;            // Куда будем делать слияние
    int begin1 = first, end1 = middle;  // Первый из двух сливаемых массивов array[begin1]..array[end1]
    int begin2 = middle+1, end2 = last; // Второй из двух сливаемых массивов array[begin2]..array[end2]
 
    for(; begin1 <= end1 && begin2 <= end2; ) {
        if (array[begin1] < array[begin2]) 
            temp[idx] = array[begin1++];
        else
            temp[idx] = array[begin2++];
        idx++;
    }
 
    for(; begin1 <= end1; )
        temp[idx++] = array[begin1++];
 
    for(; begin2 <= end2; )
        temp[idx++] = array[begin2++];
 
    #ifdef DEBUG_ECHO           // Печать отладочной информации (если разрешено)
    int _z;
    cout << "***merge process begin" << endl;
    for(_z = first; _z <= last; _z++) cout << array[_z] << (_z==middle ? " - " : "  ");
    cout << endl;
    for(_z = first; _z <= last; _z++) cout << temp[_z] << "  ";
    cout << endl << "***merge process end" << endl;
    #endif
 
    for(idx = first; idx <= last; idx++) 
        array[idx] = temp[idx];
}
 
void InternalMergeSort(int array[], int first, int last, int buffer[]) {
    #ifdef DEBUG_ECHO           // Печать отладочной информации (если разрешено)
    cout << "MergeSort: " << first << "  " << last << endl;
    #endif
 
    if (first < last) {
        int m = (first + last)/2;
        InternalMergeSort(array, first, m, buffer);
        InternalMergeSort(array, m+1, last, buffer);
        Merge(array, first, m, last, buffer);
    }
}
 
void MergeSort(int array[], int first, int last) {
    // Временный массив выделяется только один раз
    // (не тратим время на бесполезное перераспределение памяти)
    int *buffer = new int[N];
    InternalMergeSort(array, 0, N-1, buffer);
    delete[] buffer;
}
Файл Main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <time.h>
#include <stdlib.h>
#include <iostream>
#include "MergeSort.h"
 
void main(void) {
    int const N = 10;
    int i, *a = new int[N];
 
    srand(unsigned(time(NULL)));
    for(i=0; i<N; i++) std::cout << (a[i] = int((double(rand()) / RAND_MAX) * 100)) << "\t";
    std::cout << std::endl;
 
    MergeSort(a, N);
 
    for(i=0; i<N; i++) std::cout << a[i] << "\t";
    std::cout << std::endl;
    delete[] a;
}
При компиляции выскакивает ошибка:
Error 1 error C2065: 'N' : undeclared identifier c:\users\администратор\documents\visual studio 2008\projects\c++\console\p1068\p1068\mergesort.cpp 56 p1068
Error 2 error C2065: 'N' : undeclared identifier c:\users\администратор\documents\visual studio 2008\projects\c++\console\p1068\p1068\mergesort.cpp 57 p1068
Не понимаю почему ведь, N уже определена как переменная:
C++
1
2
int const N = 10;
int i, *a = new int[N];
Почему же тогда выскакивает сообщение, N не определена как переменная
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.