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

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

Войти
Регистрация
Восстановить пароль
 
TamaGafq
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 12
#1

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

17.11.2017, 23:47. Просмотров 146. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка списка бинарными вставками (C++):

Сортировка бинарными вставками - C++
Имеется функция сортировки бинарными вставками, нужна программа, в которой она будет использоваться. Помогите написать void...

Сортировка бинарными вставками - C++
Сортировка бинарными вставками работает неправильно. Помогите найти ошибку. Вот код: template &lt;class T&gt; void swap(T&amp; a, T&amp; b){ ...

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

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

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

Сортировка вектора по полю(Сортировка вставками) - C++
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include &lt;iostream&gt; ...

4
Kuzia domovenok
2130 / 1958 / 197
Регистрация: 25.03.2012
Сообщений: 6,821
Записей в блоге: 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
2130 / 1958 / 197
Регистрация: 25.03.2012
Сообщений: 6,821
Записей в блоге: 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
Привет! Вот еще темы с ответами:

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

сортировка вставками - C++
Начал изучать Кормена. Написал первый алгоритм. Не сортируется первый элемент массива. Код написан по книге. #include&lt;iostream&gt; using...

Сортировка вставками - C++
Где-то ошибка в цикле... помогите) ... int array = {3, 2, 1}, min = 0, a = 0, b = 0; ... for(a = 1; a &lt; size; ++a); ...

Сортировка вставками - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; const int n = 1000; int size; void...


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

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

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