Задача: Сравнение алгоритмов сортировки массива
Исходник: QuickSort.cpp, язык: C++ [code #32, hits: 26461]
автор: this [добавлен: 15.02.2009]
  1. #include "QuickSort.h"
  2.  
  3. QuickSort::QuickSort(int n, int* x) : Sort(n, x) {
  4. this->algName = "Quick Sort [Center]";
  5. }
  6.  
  7. void QuickSort::Run(void)
  8. {
  9. this->Launch(this->x, this->n);
  10. }
  11.  
  12. void QuickSort::Launch(int* x, int size) {
  13. long i = 0, j = size - 1; // начальные значения
  14. int temp, p;
  15.  
  16. p = x[ size>>1 ]; // выбираем середину
  17.  
  18. // процедура разделения
  19. do {
  20. while (x[i] < p) i++;
  21. while (x[j] > p) j--;
  22.  
  23. if (i <= j) {
  24. temp = x[i]; x[i] = x[j]; x[j] = temp;
  25. this->CountSwap();
  26. i++; j--;
  27. }
  28. } while (i <= j);
  29.  
  30.  
  31. // рекурсивные вызовы, если есть, что сортировать
  32. if ( j > 0 ) this->Launch(x, j);
  33. if ( size > i ) this->Launch(x+i, size-i);
  34. }
  35.  
  36. QuickSort::~QuickSort(void)
  37. {
  38. }
Реализация класса быстрой сортировки.
Опорный элемент - середина.

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

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