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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 11:16   #1
clumz
 
Регистрация: 07.12.2011
Сообщений: 4
Вопрос С++ Шейкер сортировка

Подскажите, пожалуйста, что неправильно? код работает, но сортировка не осуществляется!((
Комментарий:
  1. вводим размерность массива
  2. вводим элементы массива
  3. вывод элементов массива программой
  4. вывод отсортированной последовательности

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int main(){
int n, i, A[i], x;
long k = n-1;
long lb=1, ub = n-1;
 
  cout << "Введите размерность одномерного массива ";
  cin >> n;
  cout << "\n Введите элементы одномерного массива размерности " << n << "\n";

for(i=0; i<n; i++)
		cin >> A[i];
for(i=0; i<n; i++)
		cout << "\t"<< A[i];
		cout << "\n"; 

do {
   for(i=ub; i>0; i-- ) { 
   		if ( A[i-1] > A[i] ) {x=A[i-1]; A[i-1]=A[i]; A[i]=x; k=i;}
}
		    lb = k+1;
   for (i=1; i<=ub; i++) {    
   	   if ( A[i-1] > A[i] ) {x=A[i-1]; A[i-1]=A[i]; A[i]=x; k=i;}
}
      ub = k-1;}
  while ( lb < ub );

  for(k=0; k<n; k++)

  cout << "\t"<< A[k];
  getch ();
  return 0;
}

Последний раз редактировалось ACE Valery; 25.01.2012 в 00:37.
clumz вне форума Ответить с цитированием
Старый 07.12.2011, 21:03   #2
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

google пример

Код:
template<class T>
void swap(T* x, int i, int j) {
    T tmp;
    tmp = x[i]; x[i] = x[j]; x[j] = tmp;
}

template<class T>
void ShakerSort(T* x) {
    int last = n-1;
    int left = 1, right = n-1;
    
    /* основной цикл до тех пор пока границы
       отсортированных с разных сторон отрезков
       не пересекутся */
    do {
        /* проход снизу вверх */
        for (int j = right; j > 0; j--) {
            if (x[j-1] > x[j]) {
                swap(x, j-1, j);
                last = j;
            }
        }
        
        /* Корректируем нижнюю границу
           до которой уже все элементы получились
           отсортироваными */
        left = last + 1;

        /* проход сверху вниз */
        for (int j = 1; j <= right; j++) {
            if (x[j-1] > x[j]) {
                swap(x, j-1, j);
                last = j;
            }
        }
        
        /* Корректируем верхнюю границу
           после которой уже все элементы получились
           отсортироваными */
        right = last - 1;
    } while (left < right);
}
проверил он работает.
rUs_LAN вне форума Ответить с цитированием
Старый 24.01.2012, 21:05   #3
clumz
 
Регистрация: 07.12.2011
Сообщений: 4
По умолчанию

Спасибо! все получилось!
clumz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка шейкер-пузырьком (Delphi) Biker29 Помощь студентам 6 25.08.2013 12:16
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
Шейкер-сортировка пузырьком Biker29 Общие вопросы Delphi 2 11.12.2010 22:56
[C++] Шейкер-сортировка двусвязного списка Attenti_ON Помощь студентам 0 17.11.2009 00:24