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

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

Войти
Регистрация
Восстановить пароль
 
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
#1

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

18.04.2012, 00:41. Просмотров 1058. Ответов 3
Метки нет (Все метки)

я написал алгоритм который будет просто менять поля 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2012, 00:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сортировка линейного списка перестановками (C++):

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

Сортировка динамического линейного списка - C++
Подскажите пожалуйста как вывести список книг изданных после указанного года.Я уже все пересмотрела везде только добавить -удалить.Это я...

Сортировка линейного списка по полю year - C++
Господа подскажите как осуществить сортировку списка по полю year? При этом неважно по убыванию или возрастанию, метод сортировки тоже...

Сортировка линейного списка слиянием сверху вниз - C++
«Функция merge должна сливать список, на который указывает a, со списком, на который указывает b, с помощью вспомогательного указателя с....

Сортировка двунаправленного линейного списка по алгоритму Хоара - C++
ПОМОГИТЕ СРОЧНО!!!! нужно отсортировать двунаправленный линейный список по алгоритму Хоара менять местами можно только указатели!! код...

Спроектировать шаблон класса spisok для реализации односвязного линейного списка. Не работает сортировка - C++
Здравствуйте! Очень нужна помощь в реализации программы. Задание: Спроектировать шаблон класса spisok для реализации односвязного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;
}
в чем здесь может быть ошибка?
0
zitxbit
Master C/C++
88 / 740 / 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
1
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
01.05.2012, 00:16  [ТС] #4
но все-таки этот алгоритм меняет только поля value
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2012, 00:16
Привет! Вот еще темы с ответами:

сортировка перестановками - C++
нужно отсортировать линейный список перестановками я так понимаю это тоже самое что пузырек?

Сортировка перестановками - C++
Хотел написать функцию для сортировки. Компилятор ошибок не выдает.На выводе выходит это: 3 2 5 4 1 8 6 9 7 11 13 10 12 14 -858993460 ....

Привести пример реализации любого линейного списка списка с использованием лишь структур - C++
Буду благодарен, если кто-нибудь сможет привести пример реализации любого линейного списка списка с использованием лишь структур (то есть...

Удаление Линейного списка - C++
Доброго вечера. Вопрос следующий : Полностью ли я освободил память выделенную под ЛС следующей функцией. В функцию передается...


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

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

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