Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Быстрая сортировка


Автор: Beholder 16.5.2007, 19:05
Добрый день всем. Надо в C++ Builder сделать быструю сортировку. Нашел код:
Код

template<class T>
void QuickSortCenter(T* x, long N) {
  long i = 0, j = N; // начальные значения
  T temp, p;

  p = x[ N>>1 ];     // выбираем середину

  // процедура разделения
  do {
    while (x[i] < p) i++;
    while (x[j] > p) j--;

    if (i <= j) {
      temp = x[i]; x[i] = x[j]; x[j] = temp;
      i++; j--;
    }
  } while (i <= j);


  // рекурсивные вызовы, если есть, что сортировать 
  if ( j > 0 ) QuickSortCenter(x, j);
  if ( N > i ) QuickSortCenter(x+i, N-i);
}


Создал новый юнит, вставил код, скомпилировал, вроде запускается, но как мне проверить на работоспособность? т.е. как подставить входные данные? В С++ и Builder'е ничего не соображаю, вот и вопрос такой глупый...

Автор: Voldemar2004 16.5.2007, 19:29
В Builder'e есть готовый QSort + используй функтор сравнения, только и всего
Код
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };

int main(void)
{
   int  x;

   qsort((void *)list, 5, sizeof(list[0]), sort_function);
   for (x = 0; x < 5; x++)
      printf("%s\n", list[x]);
   return 0;
}

int sort_function( const void *a, const void *b)
{
   return( strcmp((char *)a,(char *)b) );
}

Цитата(Beholder @  16.5.2007,  20:05 Найти цитируемый пост)
как подставить входные данные?
Фактический параметр функции, т.е. аргумент функции - твои входные данные.

Автор: Beholder 17.5.2007, 02:38
Спасибо, разобрался, строенная функция не нужна.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)