-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
1

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

06.04.2015, 23:01. Показов 2640. Ответов 21
Метки нет (Все метки)

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
//Сортировка Шелла
void Shell(int **matr, int n1)
{
    for( i=0;i<n1;i++)
    {
    printf("Введет элемент равный в строке номер [%d] T\n",i+1);
    scanf("%d",&T);
        for(j=0;j<n1;j++)
                {
                    if(*(*(matr+i)+j)==T)
                    {
                        k=j;
                        flag=1;
                    }
        }
                if(flag==0) 
                printf("Элемента равного T в строке нет");
                                    else{
                                        int r;
                for(z = (n1-k)/2; z > 0; z /=2)
        for(j = z; j < n1 ; j++)
        {
            int t = matr[i][j];
            for( r = j; r>=z; r-=z)
            {
                if(t < matr[i][r-z])
                    matr[i][r] = matr[i][r-z];
                else
                    break;
            }
            matr[i][r] = t;
        }
 
            }
                                        T=0;
                    }
    printf("Ваш массив успешно отсортирован\n");
    }
Задача состоит в сортировке строк матрицы по возрастанию алгоритмом Шелла,от элемента введеного с клавиатуры.Почему у меня сортирует всю строку,а не от элемента,введенного с клавиатуры?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2015, 23:01
Ответы с готовыми решениями:

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком...

Сортировка Шелла и пирамидальная сортировка для символов
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки...

Пирамидальная сортировка и сортировка Шелла
Ребята помогите пожалуйста, я NEWBIE и не могу решить такая задача : Выполнить сортировку по...

Сортировка Шелла и сортировка вставками
Напишите программу для: 1)Сортировка вставкой 2)сортировка Шелла

21
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
07.04.2015, 20:35 2
что делает по-твоему эта строка?

C++
1
if(*(*(matr+i)+j)==T)
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
07.04.2015, 21:09  [ТС] 3
Цитата Сообщение от Ultrafight Посмотреть сообщение
что делает по-твоему эта строка?
))Эта строка?))Находит элемент равный Т в каждой строке.
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
07.04.2015, 21:45 4
C++
1
2
if(flag==0)
printf("Элемента равного T в строке нет");
это условие никогда не выполнится, поскольку flag не обнуляется
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
07.04.2015, 23:31  [ТС] 5
Цитата Сообщение от Ultrafight Посмотреть сообщение
это условие никогда не выполнится, поскольку flag не обнуляется
)))))))))))))))))Да?))Выполнится 100%, потому что у меня глобальная переменная flag=0, и каждый раз при переходи на строку она будет обнулятся
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
07.04.2015, 23:55 6
Цитата Сообщение от artart96 Посмотреть сообщение
*(*(matr+i)+j)
Да уж, любят люди поизвращаться над языком

Цитата Сообщение от artart96 Посмотреть сообщение
Да?))Выполнится 100%
Ну так выкладывай полный код. Твоя функция сама по себе не рабочая, а необходимость использования глобальных переменных в ней не очевидна, мягко говоря.
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
07.04.2015, 23:57 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int z=0; z<N; z++)
    {
        for(k = N-matr_pos[z]/2; k > 0; k /=2)
        {
            for(i = k; i < N-matr_pos[z]; i++)
            {
                t = matr[z][i+matr_pos[z]];
                for(j = i; j>=k; j-=k)
                {
                    if(t < matr[z][j-k+matr_pos[z]])
                        matr[z][j+matr_pos[z]] = matr[z][j-k+matr_pos[z]];
                    else
                        break;
                }
                matr[z][j+matr_pos[z]] = t;
            }
        }
    }
сейчас подставлю твои параметры
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.04.2015, 00:07  [ТС] 8
Цитата Сообщение от DISTURB Посмотреть сообщение
Да уж, любят люди поизвращаться над языком
Некоторые люди просто умеют думать не по шаблону.
Цитата Сообщение от DISTURB Посмотреть сообщение
Ну так выкладывай полный код. Твоя функция сама по себе не рабочая, а необходимость использования глобальных переменных в ней не очевидна, мягко говоря.
))Причем здесь flag и глобальные переменные,вопрос совсем в другом,flag и глобальные переменные на сортировку не влияют.

Добавлено через 2 минуты
Цитата Сообщение от Ultrafight Посмотреть сообщение
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(int z=0; z<N; z++)
* * {
* * * * for(k = N-matr_pos[z]/2; k > 0; k /=2)
* * * * {
* * * * * * for(i = k; i < N-matr_pos[z]; i++)
* * * * * * {
* * * * * * * * t = matr[z][i+matr_pos[z]];
* * * * * * * * for(j = i; j>=k; j-=k)
* * * * * * * * {
* * * * * * * * * * if(t < matr[z][j-k+matr_pos[z]])
* * * * * * * * * * * * matr[z][j+matr_pos[z]] = matr[z][j-k+matr_pos[z]];
* * * * * * * * * * else
* * * * * * * * * * * * break;
* * * * * * * * }
* * * * * * * * matr[z][j+matr_pos[z]] = t;
* * * * * * }
* * * * }
* * }
сейчас подставлю твои параметры
И?Это алгоритм сортировки Шелла,причем всей строки сразу.Почитай вопрос,а не отвечай,что знаешь просто по теме.
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
08.04.2015, 00:10 9
замени свой блок на этот

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(z = n1-k/2; z > 0; z /=2)
        {
            for(j = z; j < n1-k; j++)
            {
                int t = matr[i][j+k];
                for(r = j; r>=z; r-=z)
                {
                    if(t < matr[i][r-z+k])
                        matr[i][j+k] = matr[i][r-z+k];
                    else
                        break;
                }
                matr[i][r+k] = t;
            }
        }
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
08.04.2015, 00:15 10
Цитата Сообщение от artart96 Посмотреть сообщение
Некоторые люди просто умеют думать не по шаблону.
Запутывание кода уже считается умением думать не по шаблону. Надо же
В чем же "оригинальность" данного метода? И чем хуже обычные скобки?

Не по теме:

P.S. вам не Элеонора преподаёт случайно?:)

0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
08.04.2015, 00:15 11
после этого if(*(*(matr+i)+j)==T) мне хотелось оторвать тебе руки...

"И?Это алгоритм сортировки Шелла,причем всей строки сразу.Почитай вопрос,а не отвечай,что знаешь просто по теме."- это будет говорить человек, который взял код из википедии, заменил там счетчики на свои е*нутые значения и не в силах разобраться, что же делает каждый цикл...
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.04.2015, 00:29  [ТС] 12
Цитата Сообщение от Ultrafight Посмотреть сообщение
замени свой блок на этот
Сортируется все строки с самого начала.

Добавлено через 1 минуту
Цитата Сообщение от Ultrafight Посмотреть сообщение
"И?Это алгоритм сортировки Шелла,причем всей строки сразу.Почитай вопрос,а не отвечай,что знаешь просто по теме."- это будет говорить человек, который взял код из википедии, заменил там счетчики на свои е*нутые значения и не в силах разобраться, что же делает каждый цикл...
Да и ты не далеко ушел,скопировал с той же википедии алгоритм и хочет показаться мегапрогером, указатели подучи,прогер.

Добавлено через 2 минуты
Цитата Сообщение от Ultrafight Посмотреть сообщение
е*нутые значения и не в силах разобраться, что же делает каждый цикл...
Скинь мыло,я тебе блок-схему с комментами нарисую,чтобы и ты смог разобраться,умник.

Добавлено через 9 минут
Цитата Сообщение от DISTURB Посмотреть сообщение
Запутывание кода уже считается умением думать не по шаблону. Надо же
В чем же "оригинальность" данного метода? И чем хуже обычные скобки?
Скобки-ясно,любитель Паскаля.Лучше бы нашел ошибку,а не синтаксис смотрел.
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
08.04.2015, 00:34 13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(z = n1-k/2; z > 0; z /=2)
        {
            for(j = z; j < n1-k; j++)
            {
                t = matr[i][j+k];
                for(r = j; r>=z; r-=z)
                {
                    if(t < matr[i][r-z+k])
                        matr[i][r+k] = matr[i][r-z+k];
                    else
                        break;
                }
                matr[i][r+k] = t;
            }
        }
а так?
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
08.04.2015, 00:51 14
Цитата Сообщение от artart96 Посмотреть сообщение
Скобки-ясно,любитель Паскаля
Назови хоть одно преимущество того метода, который ты использовал для доступа к массиву. (если уж ты мыслишь не по шаблону )
А паскаль при чем здесь?
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.04.2015, 19:05  [ТС] 15
Цитата Сообщение от DISTURB Посмотреть сообщение
Назови хоть одно преимущество того метода, который ты использовал для доступа к массиву. (если уж ты мыслишь не по шаблону )
А паскаль при чем здесь?
Слушай,я понимаю,что ты в коде не можешь разобраться, а можешь тупенько смотреть на синтаксис,даже не понимаю,что все пишут по разному и не такой профессионал,чтобы критиковать здесь стиль написания кода.Если бы ты, что-то из себя представлял,как прогер,то нашел бы ошибку и ответил,где она,а так иди в другом месте показывай свои неглубокие знания,любитель тупой критики.
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
08.04.2015, 19:08 16
artart96, так ты ответишь на вопрос или нет? Для тебя, с твоими то знаниями - труда не должно составить.
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.04.2015, 19:16  [ТС] 17
Цитата Сообщение от DISTURB Посмотреть сообщение
artart96, так ты ответишь на вопрос или нет? Для тебя, с твоими то знаниями - труда не должно составить.
1)Почему использовал указатели: работа через указателей быстрее.2)Это в школе,при работе с Паскалем и статическим массивом использовали скобки, при работе с динамическим массивом, в СИ предпочтительнее - указатели.
0
16 / 16 / 11
Регистрация: 23.10.2013
Сообщений: 60
08.04.2015, 19:40 18
DISTURB, меня artart96 путает) подскажи, кто из нас сошел с ума)
int ** matr - двойной указатель на int
когда берем matr[i][j], то по указателю обращаемся к элементу [i,j]
это же и есть указатели... что artart96 путает мя?)
0
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
08.04.2015, 19:55  [ТС] 19
Цитата Сообщение от Ultrafight Посмотреть сообщение
DISTURB, меня artart96 путает) подскажи, кто из нас сошел с ума)
int ** matr - двойной указатель на int
когда берем matr[i][j], то по указателю обращаемся к элементу [i,j]
это же и есть указатели... что artart96 путает мя?)
Твой повторный код так же неправильно сортирует.Дааа, ребята.Почитайте,представление динамического массива в памяти компьютера, статического массива.Поймите,что такое массив указателей.

Добавлено через 1 минуту
Цитата Сообщение от artart96 Посмотреть сообщение
DISTURB, меня artart96 путает) подскажи, кто из нас сошел с ума)
int ** matr - двойной указатель на int
когда берем matr[i][j], то по указателю обращаемся к элементу [i,j]
это же и есть указатели... что artart96 путает мя?)
Можете еще почитать логического и физическое представление данных в памяти компьютера.
0
20 / 20 / 14
Регистрация: 07.02.2015
Сообщений: 145
08.04.2015, 21:33 20
Ultrafight, мы с вами просто мыслим по шаблону.
Цитата Сообщение от artart96 Посмотреть сообщение
Дааа, ребята.Почитайте,представление динамического массива в памяти компьютера, статического массива.Поймите,что такое массив указателей.
http://stackoverflow.com/quest... ys-element
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2015, 21:33
Помогаю со студенческими работами здесь

Сортировка Шелла
объясните пожалуйста эту часть: шаг сортировки задается формулами: 2k-1, (2k-(-1)k)/3 что такое...

Сортировка Шелла
Поделитесь пожалуйста исходником программы которая сортирует одномерный массив методом Шелла, что...

Сортировка Шелла
В текстовом файле с именем FileName1 находится список учеников. Для каждого ученика указан его балл...

Сортировка Шелла
Помогите пожалуйста! Расписать по шагам сортировку массива с помощью алгоритма сортировки...

Сортировка Шелла
Скажите пожалуйста какой из вариантов лучше использовать для реализации сортировки Шелла? Второй...

Сортировка Шелла
Сортировать массив,массива задаешь сам,но вывод на экран поэтапна или каждый алгоритм должен на...


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

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

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