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

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

Войти
Регистрация
Восстановить пароль
 
Kreativ
2 / 2 / 0
Регистрация: 22.09.2012
Сообщений: 202
#1

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

23.09.2012, 15:16. Просмотров 902. Ответов 1
Метки нет (Все метки)

Привет всем, пытаюсь сделать сортировку 100 чисел слиянием. Выдается ошибка на функции delete :error type ‘int’ argument given to ‘delete’ expected pointer
Вот код:

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
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <iomanip>
 
 
using namespace std;
 
int intarray[100];
 
template<class T>
// a - сортируемый массив, его левая граница lb, правая граница ub
 
void mergeSort(T a[], long lb, long ub)
{
  long split;                   // индекс, по которому делим массив
 
  if (lb < ub) {                // если есть более 1 элемента
 
    split = (lb + ub)/2;
 
    mergeSort(a, lb, split);       // сортировать левую половину
    mergeSort(a, split+1, ub);// сортировать правую половину
    merge(a, lb, split, ub);    // слить результаты в общий массив
  }
}
template<class T>
void merge(T a[], long lb, long split, long ub)
 {
// Слияние упорядоченных частей массива в буфер temp
// с дальнейшим переносом содержимого temp в a[lb]...a[ub]
 
  // текущая позиция чтения из первой последовательности a[lb]...a[split]
  long pos1=lb;
 
  // текущая позиция чтения из второй последовательности a[split+1]...a[ub]
  long pos2=split+1;
 
  // текущая позиция записи в temp
  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++];
 
  // скопировать буфер temp в a[lb]...a[ub]
  for (pos3 = 0; pos3 < ub-lb+1; pos3++)
    a[lb+pos3] = temp[pos3];
 
   delete temp[ub-lb+1];
}
 
 
int main()
{
    {
        srand(time(NULL));
 
        for(int i=0;i<100;i++)
          {
            intarray[i]=rand()%1000;
            for(int j=0;j<i;j++)
             if(intarray[j]==intarray[i])
               intarray[i]=rand()%1000;
          }
 
        cout<<"Odnomernyi massiv iz 100 elementov, v vide tablicy:"<<endl<<endl;
 
        for(int i=0;i<10;i++)     //Вывод на массива на экран
          {
            for(int j=0;j<10;j++)
              cout<<setw(7)<<intarray[i*10+j];
            cout<<endl;
          }
         mergeSort(intarray, 0, 100);
    // a - сортируемый массив, его левая граница lb, правая граница ub
}
}
Добавлено через 27 минут
Я сам разобрался счастья полные штаны )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 15:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка слиянием (C++):

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

2 сортировки: пирамидальная сортировка и сортировка слиянием - C++
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель качества сортировки (количество операций, т.е....

Шейкерная сортировка + сортировка слиянием - C++
вот часть когда,которая выполняет шейкерную сортировку : для символьного и целочисленого массива . // ConsoleApplication15.cpp:...

Сортировка слиянием - 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++
Требуется отсортировать слиянием массив структур. По одному из элемерту структуры. Вторая ночь без сна, не могу понять даже реализацию...

Сортировка слиянием - 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...

1
Nixy
23.09.2012, 15:17     Сортировка слиянием
  #2

Не по теме:

красавчег

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2012, 15:17
Привет! Вот еще темы с ответами:

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

сортировка слиянием - C++
программа должна выполнять сортировку строк слиянием с использованием указателей. #include&lt;iostream&gt; #include&lt;string.h&gt; ...

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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