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

Шейкерная сортировка массива

30.11.2022, 12:10. Показов 6928. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите, пожалуйста с решением следующей проблемы:
При сортировке массива с помощью собственной функции swap (по условию задачи дополнительно считается количество сравнений и перестановок) в последний элемент сохраняется мусор:

void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}

void shaker_sort(int* A, size_t n, struct results* res) {
int left = 0;
int right = n;
int last_swap;
res->change_count = 0;
res->comp_count = 0;
while (left < right) {
last_swap = 0;
for (int i = left; i < right; i++) {
res->comp_count++;
if (A[i] > A[i + 1]) {
res->change_count++;
swap(&A[i], &A[i + 1]);

last_swap = i;
}

}
right = last_swap;
for (int j = left; j > left; j--) {
res->comp_count++;
if (A[j] > A[j - 1]) {
res->change_count++;
swap(&A[j], &A[j - 1]);

last_swap = j;
}
}
left = last_swap;
}
}
Миниатюры
Шейкерная сортировка массива  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.11.2022, 12:10
Ответы с готовыми решениями:

Шейкерная сортировка массива
Не удается с внизсходящего поменять сортировку на вверхсходящую #include &lt;iostream&gt; #include &lt;windows.h&gt; #include...

Шейкерная сортировка массива (в виде функции)
Выполнить сортировку целочисленного массива(поиск в массиве) из n элементов. Алгоритм сортировки(поиска) Шейкер-сортировка, оформить в виде...

Шейкерная сортировка (перемешиванием)
Написать программу, в которой будет сортироваться массив с помощью шейкерной сортировки, то есть сначала снизу вверх, потом сверху вниз

14
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
30.11.2022, 13:09
Где-то явно границу в цикле надо сделать -1 (минус 1) (мне лень думать где именно)
Вы явно самое большое число (9) сравниваете и обмениваете с мусором за границей массива, чего делать не надо.

Кстати, на в результате сортировки единички не вместе идут, тоже странно
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
30.11.2022, 13:39
Лучший ответ Сообщение было отмечено maximsourov как решение

Решение

Цитата Сообщение от KSergey9 Посмотреть сообщение
(мне лень думать где именно)
Лень и программирование не совместимые вещи.

maximsourov, У вас несколько ошибок
Я насчитал в сумме около пяти!
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
void shaker_sort(int* A, size_t n/*, struct results* res*/) {
    int left = 0;
    int right = n-1;
    int last_swap =  n - 1;
    //res->change_count = 0;
    //res->comp_count = 0;
    while (left < right) {
    for (int i = left; i < right; i++) {
        //res->comp_count++;
        if (A[i] > A[i + 1]) {
            //res->change_count++;
            swap(&A[i], &A[i + 1]);
            last_swap = i;
        }
    
    }
    right = last_swap;
    for (int j = right; j > left; j--) {
        //res->comp_count++;
        if (A[j] < A[j - 1]) {
            //res->change_count++;
            swap(&A[j], &A[j - 1]);
            last_swap = j;
        }
    }
    left = last_swap;
    }
}
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
30.11.2022, 13:54
Цитата Сообщение от SmallEvil Посмотреть сообщение
Лень и программирование не совместимые вещи.
Извините, но забесплатно я таки сам буду выбирать что мне лень, а что интересно
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
30.11.2022, 14:01
Цитата Сообщение от KSergey9 Посмотреть сообщение
я таки сам буду выбирать что мне лень, а что интересно
Так лень или неинтересно ?
Даже с этим вам затруднительноленьнеинтересно определиться.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
30.11.2022, 14:05
SmallEvil
Чувачок, не занимайся психоанализом, у тебя не получается.

Лень, потому что не интересно. Прикинь, оно всё вместе может быть. Прикольно, да?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
30.11.2022, 14:42
Цитата Сообщение от KSergey9 Посмотреть сообщение
Лень, потому что не интересно
Ммда, слова пойди поучи.
Все с тобой ясно, только побалаболить заходишь.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
30.11.2022, 14:44
Цитата Сообщение от SmallEvil Посмотреть сообщение
Все с тобой ясно, только побалаболить заходишь.
Завидовать дурно.

Ну и потом, для развлечения захожу. А там уж как сложится.
0
0 / 0 / 0
Регистрация: 30.11.2022
Сообщений: 4
01.12.2022, 16:04  [ТС]
Спасибо Вам огромное! Как видите уровень знания языка, как и опыт программирования в целом, у меня небольшой, а лабораторные в ВУЗе делать заставляют, при этом не давая необходимый материал.

Еще хотел спросить: можно ли в этот алгоритм добавить возможность нахождения количества различных чисел среди элементов массива? Еще раз огромное спасибо.
0
01.12.2022, 16:14

Не по теме:

Цитата Сообщение от SmallEvil Посмотреть сообщение
Лень и программирование не совместимые
как раз таки лень одна из причин, почему мне программирование нравится. Я себе много работы облегчил, правда перед этим пришлось голову ломать долго и мучительно.

0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.12.2022, 18:44

Не по теме:

ram876, это не лень.



Добавлено через 3 минуты
Цитата Сообщение от maximsourov Посмотреть сообщение
Еще хотел спросить: можно ли в этот алгоритм добавить возможность нахождения количества различных чисел среди элементов массива? Еще раз огромное спасибо.
Можно, но зачем ?
После сортировки примените алгоритм std::unqiue или воспользуйтесь для std::set (при этом сортировка уже не нужна)
0
0 / 0 / 0
Регистрация: 30.11.2022
Сообщений: 4
01.12.2022, 19:02  [ТС]
SmallEvil,
Цитата Сообщение от SmallEvil Посмотреть сообщение
Можно, но зачем ?
Задание такое)
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
01.12.2022, 19:07
Цитата Сообщение от maximsourov Посмотреть сообщение
можно ли в этот алгоритм добавить возможность нахождения количества различных чисел среди элементов массива?
Можно, добавляйте.

Массив отсортирован - осталось пробежать по нему постедовательно. Если очередной элемент не равен предыдущему - counter++, если равен предыдущему - пропускаем, идем дальше, на следующий элемент.
В результате посчитаете количество уникальных элементов.

Добавлено через 33 секунды
Цитата Сообщение от maximsourov Посмотреть сообщение
а лабораторные в ВУЗе делать заставляют
Напишите, пожалуйста, на какой вы специальности обучаетесь? Мне очень интересно.
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
01.12.2022, 19:08
Цитата Сообщение от maximsourov Посмотреть сообщение
Задание такое)
Котэ в шокэ.

Все равно это нужно делать после сортировки.
За N. И точка.
1
0 / 0 / 0
Регистрация: 30.11.2022
Сообщений: 4
01.12.2022, 19:59  [ТС]
Цитата Сообщение от KSergey9 Посмотреть сообщение
Массив отсортирован - осталось пробежать по нему постедовательно. Если очередной элемент не равен предыдущему - counter++, если равен предыдущему - пропускаем, идем дальше, на следующий элемент.
В результате посчитаете количество уникальных элементов.
Понял, спасибо большое
Цитата Сообщение от KSergey9 Посмотреть сообщение
Напишите, пожалуйста, на какой вы специальности обучаетесь? Мне очень интересно.
Прикладная математика и информатика, дисциплина Структуры и алгоритмы обработки данных.
Дело в том, что у меня в школе как таковой информатики не было, готовился к ЕГЭ по видео в ютубе, сдавал на python. ЕГЭ то сдал, а суперским программистом не стал пока что. Сейчас смотрю курс по C++ в интернете, и также надо делать лабораторные, но они пока выше моего уровня)

Добавлено через 57 секунд
Цитата Сообщение от SmallEvil Посмотреть сообщение
Все равно это нужно делать после сортировки.
За N. И точка.
Понял, спасибо.

Будем разбираться)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2022, 19:59
Помогаю со студенческими работами здесь

Шейкерная сортировка + сортировка слиянием
вот часть когда,которая выполняет шейкерную сортировку : для символьного и целочисленого массива . // ConsoleApplication15.cpp:...

Шейкерная сортировка двусвязного списка
Здравствуйте! У меня возникла проблема с сортировкой двусвязного списка. Получилось реализовать двусвязный список и отдельно...

Шейкерная сортировка без использования while цикла
Ребят, сделал шейкерную сортировку через два вложенных цикла - не работает. Не могу понять в чем проблема, подскажите пожалуйста. ...

Шейкерная сортировка массива
Задание №1 Часть 1. Дан числовой массив. Реализовать алгоритм шейкерной сортировки.

шейкерная сортировка одномерного массива
Доброго времени суток. Помогите пожалуйста с написанием программы по шейкерной сортировке одномерного массива, как по убыванию, так и по...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru