Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2009, 17:48   #1
slay09
 
Регистрация: 16.06.2009
Сообщений: 3
По умолчанию подкорректируйте пожалуйста прогу

Здравствуйте, господа программеры!

Прога должна сортировать массив шейкерным методом.
Суть метода:

(Предположим, мы упорядочиваем массив в порядке возрастания. После первого прохода "Пузырьком", самый большой элемент массива встанет на свое место. Выполним второй проход наоборот, от предпоследнего элемента до первого. После этого прохода встанет на свое место самый маленький элемент. Так и будем выполнять наши проходы массива: нечетные слева - направо и четные справа - налево. При этом на нечетных проходах будет занимать свое место самый большой элемент (из оставшихся), а при нечетных самый маленький (также из оставшихся). )

Листинг проги:

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 100 //кол-во эл-в массива
void sort (int *x, int n); // прототип функции сортировки шейкерным методом

main ()
{
clrscr();
int x[N];  // обьявление массива x[N]
int i;
randomize ();
printf ("\n Vyvod massiva: \n");
for (i=0;i<N;i++)
{x[i]=random(99); //массив заполняется случ. Числами (до 99)
printf("%5d",x[i]);}
sort (x,N);
getch();}

void sort (int *x, int n) // функция сортировки шейкерным методом
{
int j,k,L,R;
int tmp;
R=n;
k=n;
L=0;

do
{
for(j=R; j--; j>L+1)
{
if (x[j]<x[j-1])
{tmp=x[j-1] ;
x[j-1] = x[j];
x[j ] = tmp;
k=j;
}}
L=k;

for (j=L; j++; j<R-1)
{
if (x[j]>x[j+1])
{
tmp=x[j+1] ;
x[j+1] = x[j];
x[j] = tmp;
k=j;
}}
R=k;
}
while (L<R);

printf ("\n\n Sortirovka metodom pryamogo vybora: \n");
for (j=0; j<N; j++)
printf("%5d", x[j]);
}
Не сортирует программа и выдает что-то невнятное.
Вроде все правильно делаю, не пойму в чем дело.
slay09 вне форума Ответить с цитированием
Старый 16.06.2009, 18:19   #2
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

Для чего интернет? вы сильно намудрили с кодом, все гораздо проще.
Код:
# define SWAP(A,B) {A=A^B;B=A^B;A=A^B;}
void bubblesort(int A[], int n)
{
    int i, j;
 
    for(i = n-1 ; i > 0 ; i--)
     {
        for(j = 0 ; j < i ; j++)
         {
            if( A[j] > A[j+1] ) SWAP(A[j],A[j+1]);
         }
     }
}
lennon вне форума Ответить с цитированием
Старый 16.06.2009, 18:27   #3
slay09
 
Регистрация: 16.06.2009
Сообщений: 3
По умолчанию

lennon спасибо и прошу прощения за беспокойство нашел уже то что нужно в топике "Для студентов" =)
slay09 вне форума Ответить с цитированием
Старый 16.06.2009, 18:39   #4
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

Подкорректировал, у тебя в цикле for во-первых порядок следования условия и изменения переменной шли неправильно... И в самой функции немного изменил... Извини, printf на cout сменил, но думаю вернуть будет нетрудно, просто с сишными функциями ввода-вывода как-то не привык работать

Код:
#include <iostream>
using namespace std;
#define N 100 //кол-во эл-в массива
void sort (int *x, int n); // прототип функции сортировки шейкерным методом

int main ()
{
int x[N];  // обьявление массива x[N]
int i;
cout << "Vyvod massiva: \n";
for (i=0;i<N;i++)
{
	x[i] = rand()%99; //массив заполняется случ. Числами (до 99)
	cout << x[i] << " ";
}
sort (x,N);
system ("PAUSE");
return 0;
}

void sort (int * x, int n) // функция сортировки шейкерным методом
{
int j,k,L,R;
int tmp;
R=n-1;
k=n-1;
L=0;

do
{
for(j=R;j>L;j--)
{
if (x[j]<x[j-1])
{
	tmp=x[j-1] ;
	x[j-1] = x[j];
	x[j] = tmp;
	k=j;
}
}
L=k;
for (j=L;j<R;j++)
{
if (x[j]>x[j+1])
{
tmp=x[j+1];
x[j+1] = x[j];
x[j] = tmp;
k=j;
}
}
R=k;
}
while (L<R);

cout << "\n\n Sortirovka metodom pryamogo vybora: \n";
for (j=0; j<N; j++)
{
cout << x[j]<< " ";
}
}
опа, не успел))) lennon прав, можно гораздо проще
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 16.06.2009, 20:38   #5
slay09
 
Регистрация: 16.06.2009
Сообщений: 3
По умолчанию

assasin хоть уже и сделал, все же благодарю за поддержку!
slay09 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подкорректируйте код, плиззз... logoleha Общие вопросы Delphi 2 01.06.2009 02:24
напишите пожалуйста прогу! tim777777 Помощь студентам 2 01.03.2009 22:56
подкорректируйте програмку апрол Паскаль, Turbo Pascal, PascalABC.NET 1 14.12.2008 00:27