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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
#1

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

26.03.2012, 19:18. Просмотров 1965. Ответов 17
Метки нет (Все метки)

нужно отсортировать линейный список перестановками
я так понимаю это тоже самое что пузырек?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2012, 19:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сортировка перестановками (C++):

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

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

Тема с перестановками - C++
Помогите пожалуйста найти где можно взять алгоритмы перестановок в двумерном массиве К примру: поменять верхнюю и нижнюю половинцы...

Перестановками заполнить главную диагональ двумерного массива наибольшими элементами - C++
Дана квадратная матрица. С помощью перестановок добиться того, чтобы её максимальный элемент находился в верхнем левом углу, следующий по...

Построить последовательность n!, для n=1…7 со всеми возможными перестановками из элементов этой последовательности - C++
Помогите с задачкой...:(Построить последовательность n!, для n=1…7. Для всех элементов этой по-следовательности и построить для них все...

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

17
bunny
7 / 7 / 0
Регистрация: 18.03.2012
Сообщений: 77
26.03.2012, 19:19 #2
да это тоже самое
1
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
26.03.2012, 19:58  [ТС] #3
Цитата Сообщение от bunny Посмотреть сообщение
да это тоже самое
хорошо
то есть мне нужно реализовать стандартный код как для массивов?
0
bunny
7 / 7 / 0
Регистрация: 18.03.2012
Сообщений: 77
26.03.2012, 21:52 #4
Цитата Сообщение от crewww Посмотреть сообщение
хорошо
то есть мне нужно реализовать стандартный код как для массивов?
Да но смотря что ты хочешь сортировать? если цифры тогда простые знаки <,> если буквы коды из аски
0
Kuzia domovenok
2062 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
26.03.2012, 22:15 #5
Цитата Сообщение от crewww Посмотреть сообщение
хорошо
то есть мне нужно реализовать стандартный код как для массивов?
создай функцию перестановки двух соседних элементов.
Дальше дело техники.
1
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
26.03.2012, 23:01  [ТС] #6
естественно числа)
попробую написать код
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
08.04.2012, 01:42  [ТС] #7
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
#include <iostream>
#include <fstream>
using namespace std;
struct tElem
{
    int value;
    tElem *r;
};
void create(tElem* &list,ifstream &f)
{
    tElem *temp;
    list=new tElem;
    temp=list;
    f>>temp->value;
    while (f.peek()!=EOF)
    {
        temp->r=new tElem;
        temp=temp->r;
        temp->r=NULL;
        f>>temp->value;
    }
}
void change(tElem* &a)
{ifstream f;
create(a,f);
    tElem *temp;
    a=new tElem;
        temp=a;
        a=temp->r;
        temp->r=a;
 
}
 
void bubbleSort (tElem *&list, ifstream &f)
{   create(list);
    while (list)
    {
        if (list->r->value > list->r->r-value)
        change(list);
    }
}
написал код, но он совсем нерабочий компилятор ругается практически на все
подскажите в чем я согрешил
0
Kuzia domovenok
2062 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
08.04.2012, 11:46 #8
наверное там, где не добавил функцию main. (или она в другом файле)?

C++
1
2
3
4
5
6
7
8
9
void change(tElem* &a)
{ifstream f;
create(a,f);
    tElem *temp;
    a=new tElem;
        temp=a;
        a=temp->r;
        temp->r=a;
}
ЛОЛ. То есть ты для перестановки двух элементов
-создаёшь заново список, причём
-создаёшь его из какого-то неинициализированного файлопотока,
-берёшь в качестве аргумента нечто tElem* &a, боюсь предположить, что это, указатель на ссылку?
-затем полностью затираешь свою ссылку "а", теряя всё
-затем в а записываешь неинициализированное поле r из только созданного объекта temp
-И затем снова присваиваешь его a , в точно таком виде, в каком ты его прочитал.

Может тебе рановато списки проходить?

Добавлено через 17 минут
и ещё: вот это
C++
1
2
3
4
5
while (list)
    {
        if (list->r->value > list->r->r-value)
        change(list);
    }
-это не сортировка пузырьком, это один проход пузырька, а надо сортировать, пока не отсортируется
Лучше так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
tElem *list_ptr;
bool run;
while (run){
   run=true;
   list_ptr=start;
   while (list_ptr->r)
    {
        if (list_ptr->value > list_ptr->r-value){
                change(list_ptr);
                run=false;
               }
    }
}
Так что перестань пихать везде create(list)!!!!!
1
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
08.04.2012, 12:36  [ТС] #9
может и рановато
но меня никто не спрашивает рановато ли мне или нет, задают и я разбираюсь
0
Kuzia domovenok
2062 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
08.04.2012, 12:45 #10
Ой только я похоже с run=true напутал
так чуть вернее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
tElem *list_ptr;
bool run=true;
while (run){
   run=false;
   list_ptr=start;
   while (list_ptr->r)
       {
        if (list_ptr->value > list_ptr->r-value){
                change(list_ptr);
                run=true;
                }
       }
}
1
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
08.04.2012, 19:00  [ТС] #11
как сделать правильно перестановку 2-x элементов?
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
09.04.2012, 20:40  [ТС] #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 tElem *c;
 tElement *t=c;
 
for (int i=0; i<n; i++)
 { c=t;
 
 while (c->r!=NULL)
 { if (c->value>c->r->value)
 { int temp=c->value;
 c->value=c->r->value;
 c->r->value=temp;
 }
 c=c->r;
 }
 }
а что если вот так реализовать сортировку?
0
Kuzia domovenok
2062 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
09.04.2012, 20:53 #13
твоё право, вполне рабочая вещь, - сработает.

Хотя, конечно, будь я преподавателем, я бы потребовал сделать через "перенаправление указателей".
ну то есть через изменение адресов на которые "следующий" и "предыдущий" указывают,
но это сложнее.
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
09.04.2012, 21:19  [ТС] #14
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
твоё право, вполне рабочая вещь, - сработает.

Хотя, конечно, будь я преподавателем, я бы потребовал сделать через "перенаправление указателей".
ну то есть через изменение адресов на которые "следующий" и "предыдущий" указывают,
но это сложнее.
я то вот именно сам и хотел через перенаправление указателей сделать, про способ выше я додумался к своему стыду не сразу а только когда мне подсказали

а как можно сделать перенаправлением указателей? выше вы написали код, но там есть функция change которая у меня бредово описана, вот как ее грамотно описать?
0
Kuzia domovenok
2062 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,572
Записей в блоге: 1
09.04.2012, 21:45 #15
Цитата Сообщение от crewww Посмотреть сообщение
я то вот именно сам и хотел через перенаправление указателей сделать, про способ выше я додумался к своему стыду не сразу а только когда мне подсказали

а как можно сделать перенаправлением указателей? выше вы написали код, но там есть функция change которая у меня бредово описана, вот как ее грамотно описать?
Во! Зацени! Хитро а? Запутаться в таком довольно просто.
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
tElem *list_ptr;
tElem *pre_ptr=NULL;
bool run;
while (run){
   run=true;
   list_ptr=start;
   while (list_ptr->r)
    {
        if (list_ptr->value > list_ptr->r-value){
               /* change(list_ptr);*/
                if (list_ptr==start){//случай если меняем первый и второй элемент особый, т.к
                                    //предыдущего элемента нет
                    start=list_ptr->next;
                    list_ptr->next=start->next;
                    start->next=list_ptr;
                }
                else{//все остальные случаи
                 pre_ptr->next=list_ptr->next;
                 list_ptr->next=list_ptr->next->next;
                 pre_ptr->next->next=list_ptr;
                }
                run=false;
               }
        pre_ptr=list_ptr;
        list_ptr=list_ptr->r;
         
    }
}
1
09.04.2012, 21:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2012, 21:45
Привет! Вот еще темы с ответами:

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

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...


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

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

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