Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Как мне узнать количество выполненных swap в сортировке?

08.01.2019, 14:12. Показов 1164. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как мне узнать количество выполненных swap в сортировке? На примере сортировки пузырьком:
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
        /// <summary>
        /// Сортирует входную коллекцию по неубыванию с использованием указанного компаратора.
        /// </summary>
        /// <remarks>Сортировка пузырьком.</remarks>
        /// <typeparam name="T">Тип элементов коллекции.</typeparam>
        /// <param name="source">Коллекция.</param>
        /// <param name="comparer">Компаратор.</param>
        public static void BubbleSort<T>(this IList<T> source, IComparer<T> comparer)
        {
            if (source == null)
                return;
 
            bool isSwapped;
            int i = source.Count - 1;
 
            do
            {
                isSwapped = false;
                for (int j = 0; j < i; j++)
                    if (comparer.Compare(source[j], source[j + 1]) > 0)
                    {
                        (source[j], source[j + 1]) = (source[j + 1], source[j]);
                        isSwapped = true;
                    }
                i--;
            } while (i > 0 && isSwapped);
        }
Можно было бы поменять на:
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
        /// <summary>
        /// Сортирует входную коллекцию по неубыванию с использованием указанного компаратора.
        /// </summary>
        /// <remarks>Сортировка пузырьком.</remarks>
        /// <typeparam name="T">Тип элементов коллекции.</typeparam>
        /// <param name="source">Коллекция.</param>
        /// <param name="comparer">Компаратор.</param>
        public static void BubbleSort<T>(this IList<T> source, IComparer<T> comparer, ref SortStatistics sortStatistics)
        {
            if (source == null)
                return;
 
            long swapCount = 0;
            bool isSwapped;
            int i = source.Count - 1;
 
            do
            {
                isSwapped = false;
                for (int j = 0; j < i; j++)
                    if (comparer.Compare(source[j], source[j + 1]) > 0)
                    {
                        (source[j], source[j + 1]) = (source[j + 1], source[j]);
                        swapCount++;
                        isSwapped = true;
                    }
                i--;
            } while (i > 0 && isSwapped);
            sortStatistics = new SortStatistics(sortStatistics.TimeSpan, swapCount);
        }
Но, на мой взгляд, это не очень хорошее решение. Есть вариант лучше?
Вложения
Тип файла: rar Sorts 1.4.rar (2.00 Мб, 0 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2019, 14:12
Ответы с готовыми решениями:

Мне нужно узнать, как получить количество доступных в заданной книге страниц?
Добрый день. У меня такая проблема. Начала изучать python. Создала программу, в которую можно загрузить файл с ссылками на сайт, где лежит...

В пузырьковой сортировке не работает swap
Почему не меняет местами? #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; using namespace std; struct NOTATKI { ...

Количество выполненных команд
Подскажите кто знает. Как определить сколько команд выполнил процессор, за время работы потока? Поток не использует никаких библиотек,...

4
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
08.01.2019, 15:08  [ТС]
Вопрос актуален.
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
08.01.2019, 15:18
Поставь счётчик при каждом swap

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void BubbleSort<T>(this IList<T> source, IComparer<T> comparer)
        {
int count=0;
            if (source == null)
                return;
 
            bool isSwapped;
            int i = source.Count - 1;
 
            do
            {
                isSwapped = false;
                for (int j = 0; j < i; j++)
                    if (comparer.Compare(source[j], source[j + 1]) > 0)
                    {
                         count++; //если выполняется перестановка, то прибавляем единицу
                        (source[j], source[j + 1]) = (source[j + 1], source[j]);
                        isSwapped = true;
                    }
                i--;
            } while (i > 0 && isSwapped);
        }
если правильно я понял вопрос

Добавлено через 3 минуты
Я тоже самое написал, сорян
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.01.2019, 15:21
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
на мой взгляд, это не очень хорошее решение.
А чем оно плохо, на ваш взгляд?
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
08.01.2019, 16:27  [ТС]
Не знаю... Я не видел, чтобы так делали. Скорее всего, опыта у меня мало. Вот сделал:
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
31
32
33
34
35
36
37
        /// <summary>
        /// Сортирует входную коллекцию по неубыванию с использованием указанного компаратора.
        /// </summary>
        /// <remarks>Сортировка пузырьком.</remarks>
        /// <typeparam name="T">Тип элементов коллекции.</typeparam>
        /// <param name="source">Коллекция.</param>
        /// <param name="comparer">Компаратор.</param>
        public static void MeasuredBubbleSort<T>(this IList<T> source, IComparer<T> comparer, out SortStatistics sortStatistics)
        {
            if (source == null)
            {
                sortStatistics = new SortStatistics();
                return;
            }
 
            Stopwatch stopwatch = new Stopwatch();
            int swapCount = 0;
 
            bool isSwapped;
            int i = source.Count - 1;
 
            stopwatch.Start();
            do
            {
                isSwapped = false;
                for (int j = 0; j < i; j++)
                    if (comparer.Compare(source[j], source[j + 1]) > 0)
                    {
                        (source[j], source[j + 1]) = (source[j + 1], source[j]);
                        swapCount++;
                        isSwapped = true;
                    }
                i--;
            } while (i > 0 && isSwapped);
            stopwatch.Stop();
            sortStatistics = new SortStatistics(stopwatch.Elapsed, swapCount);
        }
Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Sorts
{
    internal class Program
    {
        internal const string IsSortedFormatString = "Массив отсортирован: {0}";
 
        private static void Main(string[] args)
        {
            List<int> a = EnumerableExtensions.ShuffledRange(1, 20).ToList();
            a.PrintLine();
            a.MeasuredBubbleSort(Comparer<int>.Default, out SortStatistics sortStatistics);
            a.PrintLine();
            Console.WriteLine(sortStatistics);
 
            Console.ReadLine();
        }
    }
}
Основная программа.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2019, 16:27
Помогаю со студенческими работами здесь

Как посчитать количество итераций в сортировке слиянием?
void merge(int l, int r) { if (r == l) return; if (r - l == 1) { if (a &lt; a) swap(a, a); return; } int m = (r +...

Как узнать дано ли мне кодить?
Не могу определиться хочу ли я заниматься программированием. Или как узнать для меня это или нет). Самостоятельно изучать мотивации не...

Как определить количество перестановок и сравнений в выборочной сортировке
void choicesSort(int* Array, int length_array) { for (int repeat_counter(0); repeat_counter &lt; length_array; repeat_counter++) ...

Как найти в данной сортировке количество перестановок и сравнений?
void quicksort(int *mas, int first, int last) { int mid, count, m=0; int f=first, l=last; int count_compare=0, count_swap=0; ...

Как найти в этой сортировке количество перестановок и сравнений?
Как найти в этой сортировке количество перестановок и сравнений? void InsertSort(int *mas, int N) //сортировка вставками { int...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru