Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
#1

Метод Шелла - C++

24.10.2010, 01:02. Просмотров 1296. Ответов 19
Метки нет (Все метки)

попробовала написать это в С++, но что-то не так. можете подсказать
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
        int i,n,j,inc,x;
        cin>>n;
        int *A= new int [n];
        randomize();
        for (i=0;i<n;i++)
        {
        A[i]=rand()%20;
        cout<<A[i]<<" ";
        }
        for (inc=n/2;inc>=1;inc=inc/2)
        {
                while (inc>0)
                {
                        for (i=inc+1;i<=n;i++)
                        {
                                j=i-inc;
                                while (j>0)
                                {
                                        if (A[j]>A[j+inc])
                                        {
                                                x=A[j];
                                                A[j]=A[j+inc];
                                                A[j+inc]=x;
                                        }
                                }
                                
                        }
                }
        }
        for (i=0;i<n;i++)
        {
        cout<<A[i];
        }
        getch();
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2010, 01:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод Шелла (C++):

Не сходится теория и практика метод Шелла и метод простого выбора - C++
Здравствуйте! Помогите пожулуйста найти ошибке в коде, Я уже не знаю где ее искать. У меня метод простого выбора работает по показателям...

Метод Шелла - C++
Ошибка после сортировки методом Шелла. По примеру сайта http://kvodo.ru/sortirovka-shella.html В чем ошибка? #include...

Метод Шелла - C++
Помогите пожалуста решить задачу. Провести сортировку последовательности а1, … , аn методом Шелла. ЗАранее спасибо.

Метод Шелла - C++
Помогите найти ошибку. Задание - Провести сортировку последовательности а1, … , аn методом Шелла. Вот что получилось. ...

Метод Шелла - C++
Проверить упорядочены ли элементы строк матрицы. Если нет, то упорядочить их в порядке убывания методом Шелла.

Метод сортировки Шелла - C++
помогите дописать программу в case 6 СТРОИТЕЛЬНАЯ КОМПАНИЯ (поля: заказчик, вид строительных работ, продолжительность работ,...

19
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
24.10.2010, 08:17 #2
Отладчиком не пробовала пройтись?
0
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
24.10.2010, 10:47  [ТС] #3
к сожалению, я не знаю, как это делается
0
papochka
33 / 33 / 2
Регистрация: 14.11.2009
Сообщений: 137
24.10.2010, 10:58 #4
Что именно что-то не так? Конкретно вопрос?
Не компилируется? Не тот результат? Что?

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
#include <iostream>
#include <ctime>
#include <math.h>
using namespace std;
int main(int argc, char* argv[])
{
        int i,n,j,inc,x;
        cin>>n;
        int *A= new int [n];
        for (i=0;i<n;i++)
        {
        A[i]=rand()%20;
        cout<<A[i]<<" ";
        }
        for (inc=n/2;inc>=1;inc=inc/2)
        {
                while (inc>0)
                {
                        for (i=inc+1;i<=n;i++)
                        {
                                j=i-inc;
                                while (j>0)
                                {
                                        if (A[j]>A[j+inc])
                                        {
                                                x=A[j];
                                                A[j]=A[j+inc];
                                                A[j+inc]=x;
                                        }
                                }
                                
                        }
                }
        }
        for (i=0;i<n;i++)
        {
        cout<<A[i];
        }
        cin.get();
        return 0;
}
Но что-то у вас в этом участке кода:
C++
1
2
3
4
5
6
7
8
9
                                while (j>0)
                                {
                                        if (A[j]>A[j+inc])
                                        {
                                                x=A[j];
                                                A[j]=A[j+inc];
                                                A[j+inc]=x;
                                        }
                                }
В отладке он получается всегда больше нуля, и бесконечно работает, значение не меняется....
0
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
24.10.2010, 11:11  [ТС] #5
он просто выводит массив, никакой сортировки не происходит

Добавлено через 2 минуты
"for (inc=n/2;inc>=1;inc=inc/2)"
правильно ли я разместила этот цикл?

Добавлено через 9 минут
попробую разобраться, что не так. спасибо=)
0
papochka
33 / 33 / 2
Регистрация: 14.11.2009
Сообщений: 137
24.10.2010, 11:12 #6

Не по теме:

Администрация, 10 минут малова-то, я провозился, хотел поменять код - но нет...



Запомните: выделили память - освободите её.
щас дальше разбирать пойду.
0
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
24.10.2010, 11:14  [ТС] #7
cin.get(); - для чего используется это функция?
0
papochka
33 / 33 / 2
Регистрация: 14.11.2009
Сообщений: 137
24.10.2010, 11:17 #8
Цитата Сообщение от osen' Посмотреть сообщение
cin.get(); - для чего используется это функция?
аналогично getch(); в данном случае. и впишите перед cin.get();
C++
1
delete [] A;
1
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
24.10.2010, 17:04  [ТС] #9
теперь выходит ошибка "Project1.exe raised exception…», что это значит, скажите пожалуйста.
0
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
26.10.2010, 22:22  [ТС] #10
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
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
        int i,n,j,inc,x;
        cin>>n;
        int *A= new int [n];
        randomize();
        for (i=0;i<n;i++)
        {
                A[i]=rand()%20;
                cout<<A[i]<<" ";
                for (inc=n/2;inc>=1;inc=inc/2)
                {       cout<<inc;
                        for (i=inc+1;i<=n;i++)
                        {
                              j=i-inГ±;
                              if (A[j]>A[i])
                              {
                                        x=A[j];
                                        A[j]=A[i];
                                        A[i]=x;
                              }
 
 
 
                        }
                }
        cout<<A[i];
        }
 
delete [] A;
cin.get();
return 0;
}
попробовала так, но все равно что-то не то...

Добавлено через 20 часов 31 минуту
неужели совсем безвыходная задача... подтолкните в нужном направлении, пожалуйста.
0
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
27.10.2010, 04:19 #11
Цитата Сообщение от osen' Посмотреть сообщение
попробовала так, но все равно что-то не то...
Для начала сделай так, чтобы все элементы массива генерировались до запуска сортировки. Где у тебя в программе цикл, который этим занимается?
0
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
27.10.2010, 12:07  [ТС] #12
C++
1
2
3
4
5
for (i=0;i<n;i++)
        {
                A[i]=rand()%20;
                cout<<A[i]<<" ";
         }
вот он
0
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
27.10.2010, 16:35 #13
Теперь напиши отдельно цикл который выполняет сортировку.
0
osen'
5 / 5 / 1
Регистрация: 09.10.2010
Сообщений: 49
27.10.2010, 16:51  [ТС] #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for (inc=n/2;inc>=1;inc=inc/2)
        {
                while (inc>0)
                {
                        for (i=inc+1;i<=n;i++)
                        {
                                j=i-inc;
                                if (A[j]>A[j+inc])
                                        {
                                                x=A[j];
                                                A[j]=A[j+inc];
                                                A[j+inc]=x;
                                        }
                                                              
                        }
                }
        }
Добавлено через 1 минуту
я не уверена, что это правильно
0
alexzak
84 / 57 / 1
Регистрация: 07.08.2010
Сообщений: 185
27.10.2010, 22:24 #15
Это цикл из самого первого варианта. Давай лучше из последнего. А когда ты получишь тело цикла, попытайся в комментариях обьяснить, что делает каждая строчка.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2010, 22:24
Привет! Вот еще темы с ответами:

Метод сортировки Шелла - C++
Написать программу которая реализует метод сортировки Шелла. Сгенерировать три массива 100, 1.000 и 10.000 элементов типа integer...

Сортировка, метод шелла - C++
Всем доброй ночи, задача, дан список студентов и у каждого 5 оценок, отсортировать сумму оценок по убыванию и данные в новый файл, вот мой...

Метод Шелла, алгоритм обмена - C++
Помогите написать программы. 1. Упорядочить заданный список целых значений методом Шелла. 2. Доно массив записей,каждый из которых...

Не получается обнаружить ошибку(метод Шелла) - C++
Проблема в том что я написала программу на паскале,а преподаватель попросил перевести на си,и теперь не могу понять где эта ошибка,выводит...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
27.10.2010, 22:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru