0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 22
1

Сортировка списка бинарными вставками

17.11.2017, 23:47. Показов 1834. Ответов 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
void List::Sort(int n/*колво элементов*/)
{int i;int f;int g; int p;//счетчики
int m;int l;int r;//m-среднее значение l-левая граница r-правая граница
element *sr;//среднее значение
element *cur=Head;//текущий
element *pt; //указатели
element *prev;//предыдущий
for(i=1;i<n;i++){
for(p=0;p<i;p++)cur=cur->Next;//двигаем текущий
pt=Head;prev=Head;//сброс к голове
l=0;r=i;
 
        for(g=0;g<i-1;g++)prev=prev->Next;//находим предыдущий элемент
        if((cur->x)<(prev->x))//если текущий меньше предыдущего (1)
                {       while(l<=r){
                        sr=Head;//возвращаем на голову
                        m=(l+r)/2;//находим среднее значение
                        for(f=0;f<m;f++)sr=sr->Next;//двигаем среднее значение
                        if((sr->x)>(cur->x))r=m-1;else l=m+1;}//конец while
                   if(r<0){prev->Next=cur->Next;
                           cur->Next=pt;
                           Head=cur;}
                    else {for(g=0;g<l-1;g++)pt=pt->Next;
                          prev->Next=cur->Next;
                          pt->Next=cur;
                          cur=Head;
                          };
                }//конец (1)
}//конец цикла с i
}//конец кода
C++
1
2
3
4
struct element
{int x; //Инфополе. значения из x будут передаваться в список
 element *Next; //Адресное поле
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
class List //Класс Список
{element *Head; //Указатель на последний активный элемент или просто голова списка
 public:
  List() {Head=NULL;} //Конструктор и инициализация указателя пустым значением
 ~List();
 void Add(int x); //Функция для добавления значений в список
 void Show(); //Функция для отображения списка на экране
 int Howmuch(element* Head);
 void List::Shift();
 bool Empty(element* Head) ;
 void Sort(int n);
 };
Но почему то при запуске кода выскакивает ошибка которая показана на фото. У меня уже сил нет. Ткните пальцем туда, где ошибка.
Миниатюры
Сортировка списка бинарными вставками   Сортировка списка бинарными вставками   Сортировка списка бинарными вставками  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2017, 23:47
Ответы с готовыми решениями:

Сортировка бинарными вставками
Если у кого нибудь есть, выложите рабочий код сортировки бинарными вставками. Просто Си.Буду...

Сортировка бинарными вставками
Сортировка бинарными вставками работает неправильно. Помогите найти ошибку. Вот код: template...

Сортировка бинарными вставками
Имеется функция сортировки бинарными вставками, нужна программа, в которой она будет...

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

7
4055 / 3309 / 924
Регистрация: 25.03.2012
Сообщений: 12,451
Записей в блоге: 1
18.11.2017, 05:25 2
признаком конца списка является указатель Next равный нулю NULL
С этим условием в голове и надо проводить все итерации, а не в циклах с численным счётчиком for(i=1;i<n;i++)
Переделывай всё на итерирование указателями
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 22
18.11.2017, 18:19  [ТС] 3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
С этим условием в голове и надо проводить все итерации, а не в циклах с численным счётчиком for(i=1;i<n;i++)
а разве это влияет на ход программы. что нам мешает вставить их в for цикл?
или ты хочешь сказать что помимо самого цикла нужно еще какое-то условие добавить?
0
4055 / 3309 / 924
Регистрация: 25.03.2012
Сообщений: 12,451
Записей в блоге: 1
18.11.2017, 19:09 4
судя по тому, что у тебя крашится программа, т.е. ты совершенно не контролируешь свои указатели, в частности границы своего списка, то да. Цикл for(i=Head;i!=NULL; i=i->next) по крайней мере немного снизит вероятность того, что произошёл выход за пределы списка.

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

Смотри, ты хочешь найти место вставки бинарным поиском, да? А для этого вместо того чтоб проводить этот поиск, быстро перескакивая к нужному месту за log(N) операций, ты итерируешь весь список от начала до середины, потом от начала до новой середины и.т.д. накручивая даже больше итераций, чем дал бы линейный поиск!
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 22
18.11.2017, 23:57  [ТС] 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А вообще, если по-честному, то бред это всё - сортировка списка бинарными вставками! Она хороша ля массивов! Списки не предоставляют нам произвольного доступа к элементам, только последовательный, а вместе с ними вся бинарная оптимизация коту под хвост!
согласен, но мне хочется таким извращением позаниматься

Добавлено через 4 часа 42 минуты
и все таки в чем ошибка?
0
0 / 0 / 0
Регистрация: 15.07.2020
Сообщений: 40
06.12.2020, 22:41 6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А вообще, если по-честному, то бред это всё - сортировка списка бинарными вставками! Она хороша ля массивов! Списки не предоставляют нам произвольного доступа к элементам, только последовательный, а вместе с ними вся бинарная оптимизация коту под хвост!
Сказал бы это кто преподавателям в универах, которые заставляют делать 5 сортировок на списках
0
4055 / 3309 / 924
Регистрация: 25.03.2012
Сообщений: 12,451
Записей в блоге: 1
07.12.2020, 16:10 7
plyx4, свою голову надо иметь на плечах. Если преподаватель чувствует, что у студента знания плавают, он имеет полное право его грузить. Если бы студент был прошаренный, он возразил бы аргументировано, а не просто поддакивал бы преподу или отнекивал.
0
0 / 0 / 0
Регистрация: 15.07.2020
Сообщений: 40
07.12.2020, 22:13 8
да не - все гораздо проще, нам просто всем в начале семестра дали методичку с заданием, где нужно построить список и отсортировать его 5 раз. Еще и по спискам минимум информации дали, вот и плавай как хочешь, я про такую ситуацию говорил
0
07.12.2020, 22:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2020, 22:13
Помогаю со студенческими работами здесь

Сортировка списка прямыми включениями (вставками)
Ребята кто может помогите с курсовой. Пытаюсь написать класс двунаправленного списка. Проблема...

Сортировка вектора по полю(Сортировка вставками)
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma...

Сортировка Шелла и сортировка вставками
Напишите программу для: 1)Сортировка вставкой 2)сортировка Шелла

Сортировка вставками
Добрый день, есть один вопрос #include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;string&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru