Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84

Как можно отсортировать по другому?

03.08.2020, 15:45. Показов 1530. Ответов 33

Студворк — интернет-сервис помощи студентам
Как написать сортирующий алгоритм в ручную чтобы не использовать std::sort ???
какие варианты есть?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
 
void printSorted(double* arr, int size)
{
    std::sort(arr, arr + size);
    for(int i = 0; i < size; ++i)
    std::cout << arr[i] << " ";
}
 
int main()
{
    int n;
    std::cin >> n; 
    double* arr = new double[n];
    for(int i = 0; i < n; ++i) {
      std::cin >> arr[i];
    }
    printSorted(arr, n);
 
    delete [] arr;
    return 0;
}
сортировка массива по возрастанию...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2020, 15:45
Ответы с готовыми решениями:

Как можно по другому сделать?
Есть код. Самолично написанный,но почему то юньку от него глючит. Вот код: public class Dog_AI : MonoBehaviour { // int...

Как по-другому можно определить функцию?
Определите функцию, принимающую на вход целое число n и возвращающую список, содержащий n элементов, упорядоченных по возрастанию...

Как можно первую по другому решить?
1. Написать программу сравнения двух строк. Результатом работы программы должно быть сообщение о равенстве или неравенстве строк. Если...

33
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
04.08.2020, 08:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ваш первый пример - это не сортировка пузырьком, скорее вариант сортировки выбором.
нет, это как раз классическая сортировка пузырьком.
сортировка выбором приведена там же ниже.
и их различия довольно очевидны.
возможно, изначально сортировка пузырьком и являлась лишь вариацией сортировки выбором. или наоборот. это не имеет значения.
Цитата Сообщение от zayats80888 Посмотреть сообщение
Поэтому соглашусь с avgoor, интуитивно она самая понятная и простая.
ну вот вы соглашаетесь, а по какой-то причине люди интуитивно пишут сортировку пузырьком, а не выбором.
возможно, кто-то пишет и выбором или вставкой. ничего удивительного в этом не было бы.
Цитата Сообщение от avgoor Посмотреть сообщение
Как именно Вы будете эту операцию производить?
зависит от того, есть ли у меня весы.
если весы у нас есть, то мы естественно можем выбрать самую лёгкую и переложить в начало, потом выбрать самую лёгкую из оставшихся и т.д.
если же весов нет, то тут гораздо проще было бы сравнивать по две лопаты и переставлять их местами, т.к. лично я вряд ли смогу сравнить массу даже трёх лопат чисто на ощупь, поэтому я бы взял одну лопату и сравнил бы с остальными, если какая-то оказалась бы легче, то я бы поменял их местами. ну то есть это и есть сортировка пузырьком.
возможно, я сейчас у себя в голове выдал желаемое за действительное, конечно.
0
 Аватар для Annemesski
2689 / 1346 / 485
Регистрация: 08.11.2016
Сообщений: 3,734
04.08.2020, 08:16
Действительно, если сравнить сортировки выбором, вставками и пузырьком, то самой простой для понимания и реализации окажется сортировка выбором, но у пузырька есть серьезное преимущество - естесственность, можно сказать природная - на которую прямо ссылается само название алгоритма. Вот представьте что вы не знаете алгоритмов сортировок и вам сказали мол есть такой алгоритм: сортировка выбором - какие у Вас при этом мысли? Предположу что-то такое: что и по какому принципу выбираем и что с этим выбором делаем дальше? Для вставок, расчесок и прочего картина будет похожей - сплошные вопросы. А вот сказали: сортировка пузырьком, какие мысли? Думается что-то вроде: ага, пузырьки всплывают, потому что они легкие, ведь все же видели пузырьки, то как они себя ведут - процесс совершенно естественный известный и понятный.

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

И третий момент: не путайте понятия. Одно дело дать задание отсортировать и посмотреть как испытуемый с ним справится, а совсем другое научить сортировать, взять в качестве первого и самого легкого для объяснения принципа наглядный пузырек, очевидно, проще чем любой другой не имеющий таких вот простых, наглядных и повсеместно распространенных природных аналогов.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.08.2020, 09:23
GbaLog-,
C++
1
2
3
4
5
6
7
8
9
10
11
void bubbleSort(int * arr, int n)
{
  for (int i = 0; i < n; ++i)
  {
    for (int j = i; j < n; ++j)
    {
      if (arr[i] > arr[j])
        swap(arr[i], arr[j]);
    }
  }
}
я согласен что если пузырёк барыня, то данный пузырек это она же но с выходом . Чтобы пресечь выход за границу массива нужно i<n-1 похоже. Или я неправ?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
04.08.2020, 09:31
Цитата Сообщение от IGPIGP Посмотреть сообщение
Чтобы пресечь выход за границу массива нужно i<n-1 похоже. Или я неправ?
неправы, потому что индексы массивов начинаются с нуля, а n - это кол-во элементов в массиве.
соответственно первый невалидный элемент будет на arr[n], чего никогда не случится, потому что неравенство строгое.
как только i станет равным n - цикл остановится.
другое дело, что можно сделать в первом цикле i - 1, т.к. на этом шаге уже все числа будут отсортированы и последнее будет стоять на своём месте.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.08.2020, 09:56
Цитата Сообщение от GbaLog- Посмотреть сообщение
неправы,
Прав
Цитата Сообщение от IGPIGP Посмотреть сообщение
если пузырёк барыня, то данный пузырек это она же но с выходом
У вас не пузырёк. Он делает лишние перестановки и похож лишь по количеству сравнений (порядка n2/2). По классике пузырёк меняется с соседом. Вот с geeksforgeeks чтобы долго не искать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void bubbleSort(int arr[], int n) 
{ 
   int i, j; 
   bool swapped; 
   for (i = 0; i < n-1; i++) 
   { 
     swapped = false; 
     for (j = 0; j < n-i-1; j++) 
     { 
        if (arr[j] > arr[j+1]) 
        { 
           swap(arr[j], arr[j+1]); 
           swapped = true; 
        } 
     } 
  
     // IF no two elements were swapped by inner loop, then break 
     if (swapped == false) 
        break; 
   } 
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.08.2020, 09:57
у них там свой нестандартный своп по адресам был - поправил
0
 Аватар для Annemesski
2689 / 1346 / 485
Регистрация: 08.11.2016
Сообщений: 3,734
04.08.2020, 09:57
Цитата Сообщение от GbaLog- Посмотреть сообщение
другое дело, что можно сделать в первом цикле i - 1, т.к. на этом шаге уже все числа будут отсортированы и последнее будет стоять на своём месте.
Точнее: во вложенном цикле j имеет смысл инициализировать значением i + 1 ибо не имеет смысла выполнять сравнение if (arr[i] > arr[j]) при i == j, а тогда да: чтобы не было выхода за пределы массива внешний цикл треба запускать до i < n - 1
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
04.08.2020, 09:59
Цитата Сообщение от IGPIGP Посмотреть сообщение
У вас не пузырёк.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вот с geeksforgeeks чтобы долго не искать
https://www.geeksforgeeks.org/bubble-sort/
C++
1
2
3
4
5
6
7
8
9
10
11
// A function to implement bubble sort  
void bubbleSort(int arr[], int n)  
{  
    int i, j;  
    for (i = 0; i < n-1; i++)      
      
    // Last i elements are already in place  
    for (j = 0; j < n-i-1; j++)  
        if (arr[j] > arr[j+1])  
            swap(&arr[j], &arr[j+1]);  
}
ваша версия называется Optimized Implementation и просто проверяет, отсортирован ли массив дальше.
то есть это улучшает только случай, когда какая-то часть проходимой последовательности отсортирована.
не понимаю, что вы тут хотите мне доказать.
пузырёк есть пузырёк. то, что есть оптимизированные версии не делает неоптимизированный пузырёк НЕ пузырьком.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.08.2020, 10:03
Цитата Сообщение от GbaLog- Посмотреть сообщение
не понимаю, что вы тут хотите мне доказать.
что меняется сосед с соседом: arr[j] > arr[j+1] и это породило название. Пузырь всплывает меняясь местами с каплями над головой последовательно.
1
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
04.08.2020, 10:08
Цитата Сообщение от IGPIGP Посмотреть сообщение
что меняется сосед с соседом:arr[j] > arr[j+1] и это породило название.
хм. вы правы.
а я нет.
получается, у меня действительно не пузырёк получился.
ну вот, получается, что я самый простой алгоритм не так реализовал.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
04.08.2020, 11:54
Цитата Сообщение от GbaLog- Посмотреть сообщение
хм. вы правы.
Я здесь вначале индексы попутал,
Потом скукожился и весь зачах.
А Заяц первым высказался круто,
Со светом истины в разверзнутых очах,
Морковью в седце и вилком надежды.
Замечу: он был прав не раз и прежде)
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ваш первый пример - это не сортировка пузырьком
Вот.
2
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
05.08.2020, 07:51
Самое простое, сразу приходит в голову:

1. сравниваем 1-й и 2-й элементы массива, если второй меньше - меняем местами (если сортировка по возрастанию).
2. сравниваем 3-й элемент массива с 2-м и затем с первым, если 3-й меньше меняем местами.
3. и так далее до конца массива.

Если это и есть пузырёк, то вот он самый интуитивный алгоритм. Не надо путать с "человеческими" решениями. Человек просто разложит все предметы на земле, посмотрит на них сверху, выберет самый крупный и положит в конец, затем следующий и так далее. Компьютер не может "посмотреть сверху", он может либо пробежать из конца в конец, либо сравнить два соседних.
0
05.08.2020, 15:12

Не по теме:

IGPIGP,

Цитата Сообщение от IGPIGP Посмотреть сообщение
Я здесь вначале индексы попутал...
неплохо, а теперь кодом )))

0
05.08.2020, 15:43

Не по теме:

Цитата Сообщение от Annemesski Посмотреть сообщение
неплохо, а теперь кодом )))
Не кодом единым жив алгоритм. Хотя код был:
Цитата Сообщение от IGPIGP Посмотреть сообщение
По классике пузырёк меняется с соседом. Вот с geeksforgeeks чтобы долго не искать:
Кот Бегемот.

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

Можно ли как ни будь по другому зайти в WI F
Здравствуйте)) у меня такая проблема пяти летний братишка поставил пароль на WI FI все бы ни чего просто у меня нет установочного...

Как можно по-другому использовать цикл?
Нужно проверить справедливость неравенства с помощью цикла с предусловием, с постусловием или с параметром Как изменить программу, чтобы...

Как можно по-другому написать условие?
Подскажите как можно по-другому написать условие? st.append(((num&amp;1)==1)?1:0);

Как можно по-другому написать эту программу
#include &lt;iostream&gt; using namespace std; void swap(int x, int y,int &amp;x1,int &amp;y1) { int dop; dop = x; x1 = y; y1 = dop; ...

Как из ASP можно подконектиться к другому хосту?
Как из ASP можно подконектиться к другому хосту? Тоесть мне нужно создать какойто COM обьект и с помощью него законектиться на другой...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru