Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
TamaGafq
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 12
#1

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

17.11.2017, 23:47. Просмотров 157. Ответов 4
Метки нет (Все метки)

Добрый день. Скажите в чем проблема. Вроде все правильно написано. код пересматривал несколько раз и перезаписывал с чистого листа. Уже и не знаю где ошибка.Задача состоит в том что бы отсортировать однонаправленный список методом бинарных вставок. вот сам код
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
Миниатюры
Сортировка списка бинарными вставками   Сортировка списка бинарными вставками   Сортировка списка бинарными вставками  

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2017, 23:47
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

Добавлено через 4 часа 42 минуты
и все таки в чем ошибка?
0
18.11.2017, 23:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2017, 23:57

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

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

Сортировка вставками
Доброго времени суток, форумчане. Подскажите, пожалуйста, почему при первой...


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

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

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