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

сортировка линейного списка перестановками - C++

Восстановить пароль Регистрация
 
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
18.04.2012, 00:41     сортировка линейного списка перестановками #1
я написал алгоритм который будет просто менять поля value а не перенаправлять указатели, но программа не работает правильно не могли бы вы мне показать где ошибки
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
#include <iostream>
#include <fstream>
using namespace std;
 
 
struct tElem
{
 int value;
 tElem *next;
 
};
 
void create_list(tElem* &h1,ifstream &f)
{
tElem* temp;
 
h1=new tElem;
 
temp=h1;
 
f>>temp->value;
 
while(f.peek()!=EOF)
    {
        temp->next=new tElem;
        
        temp=temp->next;
        
        temp->next=NULL;
        
        f>>temp->value;
    }
 
}
 
int main()
{
 tElem *c;
 
 ifstream file("bubble.txt");
 
 create_list(c,file);
 tElem *t=c;
 
while (file.peek()!=EOF)
{
     c=t;
 
    while (c->next!=NULL)
    {
     if (c->value>c->next->value)
        {
            int temp=c->value;
 
            c->value=c->next->value;
 
            c->next->value=temp;
        }
    c=c->next;
    }
 }
t=c;
while (t)
{
    cout<<t->value<<" ";
    t=t->next;
}
file.close();
 
 return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
28.04.2012, 00:24  [ТС]     сортировка линейного списка перестановками #2
простой алгоритм с обменом полей value я сделал, а вот с перенаправлением указателей рабочий пока не получается только попытка
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
#include <iostream>
#include <fstream>
using namespace std;
 
 
struct tElem 
{
 int value;
 tElem *next;
 
};
 
void create_list(tElem* &h1,ifstream &f)  
{
tElem* temp; 
 
h1=new tElem; 
 
temp=h1; 
 
f>>temp->value; 
 
while(f.peek()!=EOF) 
    {
        temp->next=new tElem;
 
        temp=temp->next;
 
        temp->next=NULL;
 
        f>>temp->value;
    }
 
}
 
 
 
int main()
{
 tElem *c;
 
 ifstream file("bubble.txt");
 
 create_list(c,file);
 
 tElem *start;
 
 start=new tElem;
 
 start=c;
 
 tElem *t=c;
 
bool run=true;
 
while(run)
{    run=false;
 
     c=start; 
 
    while (c->next!=NULL) 
    {
     if (c->value>c->next->value) 
        {
            if (c==start)
            {
                start=c->next;
                c->next=start->next;
                start->next=c;
            }
        else
                {
                    t->next=c->next;
                    c->next=c->next->next;
                    t->next->next=c;
                }
        run=true;
        }
        t=c;
    c=c->next;
    }
 }
// вывод на экран
while (c)
{
    cout<<c->value<<" ";
    c=c->next;
}
file.close();
getchar();
 return 0;
}
в чем здесь может быть ошибка?
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
28.04.2012, 12:03     сортировка линейного списка перестановками #3
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 <stdio.h>
#include <conio.h>
 
#include <iostream>
#include <fstream>
 
struct tElem
{
    int value;
    tElem* next;
};
 
tElem* h1 = NULL;
tElem* temp = NULL;
 
using namespace std;
 
bool issorted(tElem*& h1);
void create_list(tElem*& h1, std::ifstream& ifs);
 
int main(void)
{
    char* filename = "d:\\input.txt";
    ifstream ifs(filename, ifstream::in);
 
    create_list(h1, ifs);
 
    do {
        for (tElem* list = h1; list->next != NULL; list = list->next)
              if (list->value > list->next->value)
              { int temp = list->next->value; 
                list->next->value = list->value;
                list->value = temp; }
    }while(!issorted(h1));
 
    for (tElem* list = h1; list != NULL; list = list->next)
        cout << list->value << " ";
    cout << endl;
 
    return 0;
}
 
void create_list(tElem*& h1, std::ifstream& ifs)
{
    int value = 0; h1 = new tElem; 
    ifs>>h1->value; temp = h1;
    while (ifs.peek() >= 0 && ifs.good())
    {
        tElem* item = new tElem;
        ifs>>item->value; item->next = NULL;
        temp->next = item; temp = item;
    }
}
 
bool issorted(tElem*& h1)
{
    for (tElem* list = h1; list->next != NULL; list = list->next)
        if (list->value > list->next->value)
            return false;
    return true;
}
input.txt:
2 5 7 4 5 6 9 1 0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
01.05.2012, 00:16  [ТС]     сортировка линейного списка перестановками #4
но все-таки этот алгоритм меняет только поля value
Yandex
Объявления
01.05.2012, 00:16     сортировка линейного списка перестановками
Ответ Создать тему
Опции темы

Текущее время: 17:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru