Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/37: Рейтинг темы: голосов - 37, средняя оценка - 4.65
95 / 95 / 15
Регистрация: 11.11.2010
Сообщений: 424
1

Сортировка Шелла.

06.04.2011, 23:47. Показов 6933. Ответов 2
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            public void Шелл()
            {
                int d = Length / 2;
                for (i = 0; d>=1; i++)
                {
                    l = d;
                    
                    for (int k = 0; d < Length; k++,d++)
                    {
                        if (B[k].ФИО[0] > B[d].ФИО[0])
                        {
                            temp = B[d];
                            B[d] = B[k];
                            B[k] = temp;
                        }
                    }
                    
                    d =l / 2;
                }
            }
Подскажите пожалуйста. Как мне сделать так, чтобы d округлялось в к большему. Например 10 элементов массива:на первой итерации:d=5; на второй считает d=2, а нужно чтобы было 3, ибо сортировка полностью не проходит.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2011, 23:47
Ответы с готовыми решениями:

Вектор в C# and Сортировка Шелла
Доброго времени суток! Задали лабораторную по с#, она вроде легкая, но возникли проблемы во...

Сортировка Шелла - в чём ошибка
вот мой код программы, но она не работает using System; using System.Collections.Generic;...

Сортировка Шелла - нужен рабочий пример
нужен рабочий код сортировка шелла

Сортировка методом Шелла из файла csv
Доброе время суток. Пытаюсь сделать сортировку методом Шелла данных из файла csv. При компиляции...

2
55 / 55 / 11
Регистрация: 13.04.2009
Сообщений: 169
07.04.2011, 00:12 2
C#
1
2
3
4
int tmp = Length % 2;
int d = Length / 2
if (tmp != 0)
  d++;
1
95 / 95 / 15
Регистрация: 11.11.2010
Сообщений: 424
07.04.2011, 18:24  [ТС] 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void Шелл()
            {
                while(d <= (Length / 2))
                {
                   m++;
                   d = (int)Math.Pow(2, m);
                }
                    for (i = 0; d >=1; i++)
                    {
                        m--;
                        for (int k = 0; k < Length-d; k++)
                        {
                            if (B[k].ФИО[0] > B[k+d].ФИО[0])
                            {
                                temp = B[k+d];
                                B[k+d] = B[k];
                                B[k+d] = temp;
                            }
                        }
                        d = (int)Math.Pow(2, m);
                    }
            }
Пытался сделать по другому. Находить какая степень двойки вмещается в половину количества элементов. И так далее, декрементируя степень. Но алгоритм пропускается некоторые элементы. Подскажите, пожалуйста, где ошибка.

Добавлено через 43 минуты
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
public void Шелл()
            {
                while(d <= (Length / 2))
                {
                   m++;
                   d = (int)Math.Pow(2, m);   //Ищем степень двойки
                }
                
                    for (i = 0; d >=1; i++)
                    {
                        m--;
                        d = (int)Math.Pow(2, m);
                        if (d < 1) break;
                        for (int k = 0; k < Length-d; k++)
                        {
                            if (B[k].ФИО[0] > B[k+d].ФИО[0])
                            {
                                temp = B[k];
                                B[k] = B[k+d];
                                B[k+d] = temp;
                            }
                        } 
                    }
            }
Вот так вернее, но всё равно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2011, 18:24

Сортировка Шелла. Ошибка "Индекс находится вне граница массива"
Нужно отсортировать двумерный массив методом Шелла Вот мой код private void shellSort(int...

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом...

Метод сортировки Шелла
Пожалуйста, киньте кто - нибудь пример задачи с этим методом сортировки, а то я не могу...

Реализация алгоритма сортировки Шелла
Здравствуйте! Помогите пожалуйста с реализацией алгоритма сортировки Шелла. Вот дан простой...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru