Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/82: Рейтинг темы: голосов - 82, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15

Алгоритм бинарной сортировки

01.10.2010, 14:59. Показов 16098. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите хороший алгоритм бинарной сортировки?В интернете много находила, но почему-то не работает(((
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2010, 14:59
Ответы с готовыми решениями:

WPF 3.5 Ошибка при бинарной сериализации объекта, содержащего коллекцию
Есть класс вида: public class User { .... .... private List<Task> userTasks;

Таблица с паролями в бинарной форме
Есть доставшаяся по наследству база данных, работает с сайтом Пользователь вводит имя и пароль. В...

После бинарной записи файл всё равно остаётся пустым
Хочу организовать в программе запись во внешний файл, чтобы хранить данные, при необходимости...

15
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
01.10.2010, 15:16
Цитата Сообщение от Goddessinfiniti Посмотреть сообщение
Может вы бы еще подсказали хороший алгоритм бинарной сортировки?
Может быстрой сортировки? Или алгоритм бинарного поиска?
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15
01.10.2010, 15:20  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
Может быстрой сортировки? Или алгоритм бинарного поиска?
ну, если я правильно знаю/понимаю, то не быстрая сортировка, а именно бинарная, чем-то похожа на бинарный поиск, но сортирует массив. Мне надо по неубыванию отсортировать массив на 1000000 элементов.
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
01.10.2010, 16:34
Ясно. Из того, что я вычитал - элемент просто сначала ищется, а потом вставляется в найденный индекс. Вот примерная реализация

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
38
        int FindIndex(List<int> arr, int el)
        {
            if (arr.Count == 0)
            {
                return 0;
            }
            if (arr[arr.Count - 1] < el)
            {
                return arr.Count;
            }
            int i = 0;
            int j = arr.Count;
            while (i + 1 < j)
            {
                int middle = i + (j - i) / 2;
                if (arr[middle] >= el)
                {
                    j = middle;
                }
                else
                {
                    i = middle;
                }
            }
            return arr[i] >= el ? i : j;
        }
 
        void BinarySort(ref int[] array)
        {
            List<int> sort = new List<int>();
            int index;
            for (int i = 0; i < array.Length; i++)
            {
                index = FindIndex(sort, array[i]);
                sort.Insert(index, array[i]);
            }
            array = sort.ToArray();
        }
Надеюсь, подойдет.
0
Заблокирован
02.10.2010, 06:40
Цитата Сообщение от Goddessinfiniti Посмотреть сообщение
Подскажите хороший алгоритм бинарной сортировки?В интернете много находила, но почему-то не работает(((
Потому что она называется не "бинарная сортировка", а "быстрая сортировка". В википедии она хорошо разжёвана.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15
02.10.2010, 10:37  [ТС]
Цитата Сообщение от NightmareZ Посмотреть сообщение
Потому что она называется не "бинарная сортировка", а "быстрая сортировка". В википедии она хорошо разжёвана.
Для коко как((((

Добавлено через 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
 
 
 
 
/*Тема7: сортировка данных (конкурс):
задача: необходимо отсортировать данные индивидуального задания по неубыванию
формат файла двоичный (binary)
в двоичном файле каждое 32-bit число расположено в своих 4 байтах, 
 все числа идут последовательно без дополнительных байтов
количество элементов 1 000 000 штук
сложность программы-решения - не более O(1000*N*logN)
соответствующий md5 подсоединен к проэкту*/
 
 
 
 
namespace T7
{
    class Program
    {
        
    /*    static void InsertSort2(ref long[] mas, long min)
        {
            int i, k,j;
            long x;
            long temp;
            temp = mas[0];
            //  Вставляем ограничитель, меньший каждого элемента массива 
            mas[0] = min - 1;
            // Вставляем в уже отсортированную часть элементы со 2 по max 
            for (i = 2; i < mas.Length; i++)
            {
                k = i;
                x = mas[i];
                // Передвигаем на 1 позицию направо элементы,
                // большие вставляемого элемента (он записан в x) }
                // Здесь не нужно проверять k > 1, так как есть ограничитель
                // и всегда будет A[0] < x }
                while (mas[k - 1] > x)
                {
                    mas[k] = mas[k - 1];
                    k = k - 1;
                }
                // Вставляем элемент в нужную позицию 
                mas[k] = x;
            }
            // вставить temp на правильное место
            for (j = 1; j < mas.Length && mas[j] < temp; j++)
                mas[j - 1] = mas[j];
            // вставка элемента 
            mas[j - 1] = temp;
        }*/
 
        
       public static string getMd5Hash(string input)
       {
           MD5 md5Hasher = MD5.Create();
           byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
           StringBuilder sBuilder = new StringBuilder();
           for (int i = 0; i < data.Length; i++)
           {
               sBuilder.Append(data[i].ToString("x2"));
           }
           return sBuilder.ToString();
       }
        static void Main(string[] args)
        {
            long[] mas = new long[100000];
            int i=0;
            long[] tempo =new long[100000] ;
            FileStream f = new FileStream("numbers_day=1_group=7_team=3_format=1_N=100000.dat", FileMode.Open, FileAccess.Read);
            BinaryReader fIn = new BinaryReader(f);
            long m = 400000; 
            long min=0;
            //определяем количество байт в потоке
            //Читаем данные из файла начиная с элемента с номером 1, т.е с 4 байта,
            //перемещая внутренний указатель на 4 байт, т.е. на одно число
            for (long z = 0; z < m; z += 4)
            {
                mas[i] = fIn.ReadInt32();
                if (min>mas[i])
                    min=mas[i];
               i++;
            }
            fIn.Close();
            f.Close();
            int left=0,right=0,sred=0;
            long x = 0;
       //     InsertSort2(ref mas,min);
            int n = mas.Length;
            BinarySort(ref mas);
 
    
            Console.ReadKey();
            FileStream fileout = new FileStream("output.dat", FileMode.Create, FileAccess.Write);
            BinaryWriter wf = new BinaryWriter(fileout);
            for (int q = 0; q < mas.Length; q++)
            {
                    wf.Write(mas[q]);
                    Console.WriteLine(mas[q]);
            }
            wf.Close();
            fileout.Close();
            string[] strMD5 = "numbers_day=1_group=7_team=3_format=1_N=100000.dat".Split(' ');
            Console.WriteLine("Имя исходного файла: numbers_day=1_group=7_team=3_format=1_N=100000.dat\nMD5: {0}", getMd5Hash(strMD5[0]));
        }
    }
}
Вот такой код, в него нужно вставить сортировку (быструю/бинарную).Сверху написана сортировка вставками с минимальным элементом, рабочая, но медленная, на 1000000 элементов работала примеро 27 минут, надо быстрее. Буду очень благодарна, если кто-нибудь именно покажет где и как прописать это в коде.
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
02.10.2010, 12:44
То, что я предложил оно и есть. Только механизм поиска оптимизирован.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15
02.10.2010, 13:02  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
List<int>
не знаю, что это, и программа тоже не знает((( поэтому и вставить не могу нормально, плюс у меня массив long а начинаю менять, опять не то(((
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
02.10.2010, 13:17
Цитата Сообщение от Goddessinfiniti Посмотреть сообщение
не знаю, что это, и программа тоже не знает
Надо добавить в начале файла
C#
1
using System.Collections.Generic;
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15
02.10.2010, 14:11  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
Надо добавить в начале файла
C#
1
using System.Collections.Generic;
Оно уже добавлено, все равно ругается.
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
02.10.2010, 14:16
Цитата Сообщение от Goddessinfiniti Посмотреть сообщение
Оно уже добавлено, все равно ругается.
Какая ошибка?
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15
02.10.2010, 15:42  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
Какая ошибка?
Ругается из-за преобразования типов(((
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
02.10.2010, 16:02
Цитата Сообщение от Goddessinfiniti Посмотреть сообщение
Ругается из-за преобразования типов(((
Измененный код выложите, подправлю.
1
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15
02.10.2010, 17:12  [ТС]
Цитата Сообщение от planar Посмотреть сообщение
Измененный код выложите, подправлю.
Спасибо, дошло до самой))))Счас соображаю, почему он так медленно работает...Из того, что я читала, это один из самых быстрых алгоритмов, а работает он медленне чем сортировка вставками с минимальным элементом((( Или я опять чего-то не понимаю(((
0
02.10.2010, 18:16

Не по теме:

Мля, повесить препода!

0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 15
03.10.2010, 01:34  [ТС]
Цитата Сообщение от planar Посмотреть сообщение

Не по теме:

Мля, повесить препода!

)))))))))))))))))))))))))))))))))))))))) )))) А вы еще даже половины заданий не видели. ))) Но факт есть факт. Подскажите какая сортирова быстрее всего будет выполнятся:массив 1 000 000, файл - бинрник.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2010, 01:34
Помогаю со студенческими работами здесь

Сортировка методом бинарной вставки
Добрый вечер! помогите найти и исправить ошибку /// бинарные вставки if...

Вырезать объект c бинарной картинки
Задача такая - нужно из изображения вырезать объект. С обработкой изображения столкнулась в первый...

Не могу сериализовать объект с использованием бинарной сериализации
Нужен хелп со следующей задачей: Хочу клонировать объект с помощь вот такого метода: ...

Разница между бинарной и XML сериализациями
Ув.форумчане, не нашел в интернете ответ на вопрос: какая разница между бинарной и xml...

Не удалось найти сборку при бинарной десериализации
Всем привет! Я использую бинарную сериализацию для сохранения данных. Регулярно я меняю версию...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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