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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 5.00
vikki777
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 3
#1

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

25.04.2012, 13:07. Просмотров 2388. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2012, 13:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка слиянием c++ (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++
Добрый вечер. C си начал совсем недавно работать, до этого был паскаль, делфи. Есть рабочий код на паскале, прошу помочь разобраться в чем...

4
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
25.04.2012, 17:21 #2
у тебя программа не работает.
и зачем в ней у тебя 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
vikki777
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 3
25.04.2012, 22:51  [ТС] #3
я не совсем поняла почему вам не понравилось наличие у меня 3х списков.По условию 2 уже отсортированных вводятся, а в третий я пыталась слить их так, что бы получился список, отсортированный тоже по не возрастанию
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
25.04.2012, 22:58 #4
Цитата Сообщение от vikki777 Посмотреть сообщение
я не совсем поняла почему вам не понравилось наличие у меня 3х списков.По условию 2 уже отсортированных вводятся, а в третий я пыталась слить их так, что бы получился список, отсортированный тоже по не возрастанию
как по-твоему работает сортировка слиянием? У меня подозрение, что ты не понимаешь.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
26.04.2012, 02:27 #5
http://www.cplusplus.com/reference/stl/list/sort/
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2012, 02:27
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
26.04.2012, 02:27
Ответ Создать тему
Опции темы

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