Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 3

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

25.04.2012, 13:07. Показов 4994. Ответов 4
Метки нет (Все метки)

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

Написала, но сортировка слиянием в основной программе, сама понимаю что, написана не правильно, но к сожалению не получается разобраться самой. Помогите, пожалуйста, очень нужно=( Буду очень благодарна..

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
#pragma argsused
#include <iostream.h>
#include <math.h>
struct node {
 int body;
 
 node* next;};
 
struct list {
 node* head;
 node* tail;
 list();
 void Add(int l);
 void Print();
 void Sort();};
 
 
list::list(){
        head=NULL;}
 
void list::Add(int l){
        node* c=new node;
        c->next=NULL;
        if (head==NULL)
          head=c;
        else
          tail->next=c;
        c->body=l;
        tail=c;}
 
void list::Print(){
        node* t=head;
        while (t!=NULL){
                cout << t->body << " ";
                t=t->next;}
        }
 
void main()
{list spisok1,spisok2,spisok3;int n1=0, n2=0;
cout <<"vvedite kolichestvo el-ov i 1ii spisok, yporiadochenni po nevozrastaniy";
int p;
cin >> p;
for (int i=1; i<=p; i++){
  cout << i << ": ";
  int l;
  cin >> l;
  spisok1.Add(l);
  n1++;}
 
 
 cout <<"vvedite kolichestvo el-ov i 2oi spisok, yporiadochenni po nevozrastaniy";
 cin >> p;
for (int i=1; i<=p; i++){
  cout << i << ": ";
    int l;
  cin >> l;
  spisok2.Add(l);
  n2++;}
 
 
cout << "\n1 spisok   ";
spisok1.Print();
 
cout <<"\n2 spisok   ";
spisok2.Print();
 
 
int i=0, j=0;
  while( i+j < n1+n2 )
    {
        if( (j>=n2) || ( (i<n1) && (spisok1->body>=spisok2->body) ) )
        {
            spisok3->body = spisok1->body;
            spisok1=spisok1->next;
              spisok3=spisok3->next;
 
            i++;
        } else {
            spisok3->body=spisok2->body;
            spisok2=spisok2->next;
              spisok3=spisok3->next;
 
            j++;
        }
    }
 
 cout <<"\n3 spisok   ";
spisok3.Print();
 
 
cin >> p;
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2012, 13:07
Ответы с готовыми решениями:

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

Сортировка Слиянием vs Быстрая Сортировка - что лучше
Народ, помогите разобраться какой из методов сортировки лучше &quot;Сортировка Слиянием&quot; или &quot;Быстрая Сортировка&quot;: у быстрой...

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

4
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
25.04.2012, 17:21
у тебя программа не работает.
и зачем в ней у тебя 3 списка?

Добавлено через 1 час 20 минут
Вот посмотри это.
Сортировка не совсем работает, надо отладить.
Но принцип сортировки, думаю ты поймёшь.
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
#pragma argsused
#include <iostream>
#include <math.h>
using namespace std;
struct node {
 int body;
 node* next;
};
 
struct list {
 node* head;
 node* tail;
 list();
 void Add(int l);
 void AddFront(int l);
 void Print();
 void Sort();
};
 
 
list::list(){
head=NULL;
tail=NULL;
}
 
void list::Add(int l){
        node* c=new node;
        c->body=l;
        if (!head) head=c;
        else       tail->next=c;
        tail=c;
        c->next=NULL;
        
}
 
void list::AddFront(int l){
        node* c=new node;
        c->body=l;
        if (!tail) tail=c;
        c->next=head;
        head=c;
        
}
node* merge( node* lp1,  node* lp2){
     node* begin=NULL;
     node* end=NULL;
     node* insertion;
     while(lp1&&lp2){
         if(lp1->body>lp2->body){
             insertion=lp1;
             lp1=lp1->next;
         }else{
             insertion=lp2;
             lp2=lp2->next;
         }
         if(!end){
             begin=end=insertion;
         }else{
             end->next=insertion;
             end=end->next;
         }
     }
     insertion=(lp1)?lp1:lp2;
      if(!end){
             begin=end=insertion;
         }else{
             end->next=insertion;
             end=end->next;
         }
      end->next=NULL;
      return begin;
 
}
node* MergeSort(node* start){
    if (!start) return NULL;
    node* med;
    node* temp;
    med=temp=start;
    while(temp){
        temp=(!temp->next)?NULL:temp->next->next;
        if(temp)med=med->next;
    }
    if(med){
        temp=med->next;
        med->next=NULL;
        start=MergeSort(start);
        temp=MergeSort(temp);
        return merge(start, temp);
    }
    else return start;
}
void list::Sort(){
    head=MergeSort(head);
} 
void list::Print(){
        node* t=head;
        while (t){
                cout << t->body << " ";
                t=t->next;
        }
 }
void main()
{
    list spisok1;
    int n1=0, n2=0;
    cout <<"vvedite kolichestvo el-ov i 1ii spisok, yporiadochenni po nevozrastaniy";
    int p;
    cin >> p;
    for (int i=1; i<=p; i++){
        cout << i << ": ";
        int l;
        cin >> l;
        spisok1.AddFront(l);
        n1++;
    }
    cout <<"Ishodny Spisok"<<endl;
    spisok1.Print();
    spisok1.Sort();
    cout <<endl<<"sortirovanny Spisok"<<endl;
    spisok1.Print();
    cin >> p;
    
}
1
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 3
25.04.2012, 22:51  [ТС]
я не совсем поняла почему вам не понравилось наличие у меня 3х списков.По условию 2 уже отсортированных вводятся, а в третий я пыталась слить их так, что бы получился список, отсортированный тоже по не возрастанию
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
25.04.2012, 22:58
Цитата Сообщение от vikki777 Посмотреть сообщение
я не совсем поняла почему вам не понравилось наличие у меня 3х списков.По условию 2 уже отсортированных вводятся, а в третий я пыталась слить их так, что бы получился список, отсортированный тоже по не возрастанию
как по-твоему работает сортировка слиянием? У меня подозрение, что ты не понимаешь.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
26.04.2012, 02:27
http://www.cplusplus.com/reference/stl/list/sort/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2012, 02:27
Помогаю со студенческими работами здесь

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

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

сортировка слиянием
Доброго времени суток, помогите пожалуйста с сортировкой слиянием... дело в том что нужно сделать её через вектор.. помогите кто чем...

Сортировка слиянием
Нужно сделать счётчик который будет считать количество приравниваний в программе. Я что-то никак не могу сообразить( ...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru