Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Есть-есть там рекурсия (+)

Отправлено SM 19 июля 2007 г. 13:34
В ответ на: Исходники qsort на Си мне попадались в комплекте MS VC 6.0. И рекурсии (классической, поедающей стек) там нет. отправлено vmp 19 июля 2007 г. 12:22

static void swap_item(register char *src,
register char *dest,
register size_t size);

_CODE_ACCESS void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *))
{
register char *basep = base; /* POINTER TO ARRAY OF ELEMENTS */
register unsigned i = 0; /* left scan index */
register unsigned j = nmemb - 1; /* right scan index */
register unsigned pivot = (nmemb / 2);
register char *pivp = basep + (pivot * size);

if (nmemb <= 1) return;

while( i < j )
{
while( (*compar) (basep + (i * size), pivp) < 0 ) ++i;
while( (*compar) (basep + (j * size), pivp) > 0 ) --j;
if( i < j )
{
swap_item(basep + (i * size), basep + (j * size), size);
if ( pivot == i ) { pivot = j; pivp = basep + (pivot * size); }
else if( pivot == j ) { pivot = i; pivp = basep + (pivot * size); }
++i; --j;
}
else if ( i == j ) { ++i; --j; break; }
}

if( j > 0) qsort(basep, j + 1, size, compar);
if( i < nmemb-1) qsort(basep + (i * size), nmemb - i, size, compar);
}


static void swap_item(register char *src,
register char *dest,
register size_t size)
{
while (size--)
{
register int temp = *src;
*src++ = *dest;
*dest++ = temp;
}
}



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
отымите от 2 единицу:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru