Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 22

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

17.11.2017, 23:47. Показов 2145. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2017, 23:47
Ответы с готовыми решениями:

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

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

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

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

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

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

Добавлено через 4 часа 42 минуты
и все таки в чем ошибка?
0
0 / 0 / 0
Регистрация: 15.07.2020
Сообщений: 40
06.12.2020, 22:41
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А вообще, если по-честному, то бред это всё - сортировка списка бинарными вставками! Она хороша ля массивов! Списки не предоставляют нам произвольного доступа к элементам, только последовательный, а вместе с ними вся бинарная оптимизация коту под хвост!
Сказал бы это кто преподавателям в универах, которые заставляют делать 5 сортировок на списках
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
07.12.2020, 16:10
plyx4, свою голову надо иметь на плечах. Если преподаватель чувствует, что у студента знания плавают, он имеет полное право его грузить. Если бы студент был прошаренный, он возразил бы аргументировано, а не просто поддакивал бы преподу или отнекивал.
0
0 / 0 / 0
Регистрация: 15.07.2020
Сообщений: 40
07.12.2020, 22:13
да не - все гораздо проще, нам просто всем в начале семестра дали методичку с заданием, где нужно построить список и отсортировать его 5 раз. Еще и по спискам минимум информации дали, вот и плавай как хочешь, я про такую ситуацию говорил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2020, 22:13
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru