Задача: Сравнение алгоритмов сортировки массива
Исходник: ShakerSort.cpp, язык: C++ [code #40, hits: 11182]
автор: this [добавлен: 18.02.2006]
  1. #include "ShakerSort.h"
  2.  
  3. ShakerSort::ShakerSort(int n, int* x) : Sort(n, x) {
  4. this->algName = "Sheiker Sort";
  5. }
  6.  
  7. void ShakerSort::Run(void)
  8. {
  9. int last = this->n - 1;
  10. int left = 1, right = this->n - 1;
  11.  
  12. /* основной цикл до тех пор пока границы
  13. отсортированных с разных сторон отрезков
  14. не пересекутся */
  15. do {
  16. /* проход снизу вверх */
  17. for (int j = right; j > 0; j--) {
  18. if (this->x[j-1] > this->x[j]) {
  19. this->Swap(j-1, j);
  20. last = j;
  21. }
  22. }
  23.  
  24. /* Корректируем нижнюю границу
  25. до которой уже все элементы получились
  26. отсортироваными */
  27. left = last + 1;
  28.  
  29. /* проход сверху вниз */
  30. for (int j = 1; j <= right; j++) {
  31. if (this->x[j-1] > this->x[j]) {
  32. this->Swap(j-1, j);
  33. last = j;
  34. }
  35. }
  36.  
  37. /* Корректируем верхнюю границу
  38. после которой уже все элементы получились
  39. отсортироваными */
  40. right = last - 1;
  41. } while (left < right);
  42. }
  43.  
  44. ShakerSort::~ShakerSort(void)
  45. {
  46. }
  47.  
ShakerSort.cpp :: Реализация класса Шейкер-сортировки

Заголовочный файл: ShakerSort.h
Функция-аналог: тут
Тестировалось на: MS Visual Studio 2005, .NET Framework 2.0

+добавить реализацию