Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Oleg I. Khovayko                     2:5020/400     26 Dec 2002  18:28:16
 To : Nick Kovaliov
 Subject : Re: быстpая соpтиpовка
 -------------------------------------------------------------------------------- 
 
 Nick Kovaliov wrote:
 
 > 
 > Hу может ещё не побитовая, и по 2-4 бита, например.
 > Всё же быстрее будет уже во сколько раз.
 
 Я что-то не представляю, как можно сделать сортировку
 по группе бит без использования значительной дополнительной памяти
 для сортируемых данных. Простого обмена здесь не выйдет.
 А вот с памятью у "заказчика" как раз напряженка.
 
 Или я ошибаюсь, и такой алгоритм есть? Если так - кинь в эху 
 свою реализацию групповой побитивой сортировки, не требующей
 значительной дополнительной памяти под данные.
 
 Вот моя реализация побитивой обменной сортировки, 
 использующая только одно дополнительное слово
 под данные (переменная tmp). Кстати, при желании переменную
 tmp можно сделать статической (общей для всех уровней рекурсии),
 а то и вообще обойтись без нее, обменивая данные тремя XOR-ами.
 
 Итак, мой исходник тут:
 #include <stdio.h>
 #include <stdlib.h>
 
 void bitsort(int *begin, int *end, unsigned int mask) {
   int *p1 = begin, *p2 = end, tmp;
 
   if(p1 < p2 && mask) {
     do {
      
       if((*p1 & mask) == 0) { p1++; continue; }
       if((*p2 & mask) != 0) { p2--; continue; }
 
       tmp = *p1; *p1++ = *p2; *p2-- = tmp;
  
     } while(p1 <= p2); 
     /* "<=" above need for correct recursive call below */
 
     mask >>= 1;
    
     bitsort(begin, p2, mask);
     bitsort(p1,   end, mask);
 
   } /* if mask & ptrs */
 
 } /* bitsort */
 
 #define LEN 150
 main() {
 
  int mas[LEN];
  
  int i;
 
  for(i = 0; i < LEN; i++)
    mas[i] = i ^ 53;
  
  printf("start sortir...\n");
  bitsort(mas, mas+LEN-1, 1 << 15);
  printf("end   sortir\n");
  
  for(i = 0; i < 15; ++i)        printf(" %d", mas[i]); printf("...");
  for(i = LEN-15; i < LEN; ++i)  printf(" %d", mas[i]); printf("\n");
 
 }
 
 Теперь ваш исходник -- в студию!
 
 -- 
 #include <best/regards.hpp>
 Oleg I. KHOVAYKO  
 (301)435-5885 || WEB: http://olegh.spedia.net
 --- ifmail v.2.15dev5
  * Origin: National Center for Biotechnology Information (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 быстpая соpтиpовка   Alexx Ovodov   23 Dec 2002 23:20:59 
 быстpая соpтиpовка   Alexander Shashkevich   24 Dec 2002 11:19:50 
 быстpая соpтиpовка   Alexx Ovodov   25 Dec 2002 09:05:42 
 Re: быстpая соpтиpовка   Nick Kovaliov   25 Dec 2002 11:29:25 
 Re: быстpая соpтиpовка   Andrew Ezhguroff   24 Dec 2002 15:02:51 
 Re: быстpая соpтиpовка   Oleg   24 Dec 2002 15:10:58 
 Re: быстpая соpтиpовка   Andrew Ezhguroff   25 Dec 2002 04:03:51 
 Re: быстpая соpтиpовка   Sergey Andrianov   26 Dec 2002 23:58:08 
 быстpая соpтиpовка   Alexx Ovodov   25 Dec 2002 09:11:37 
 Re: быстpая соpтиpовка   Oleg Khovayko   26 Dec 2002 09:04:23 
 Re: быстpая соpтиpовка   Oleg Khovayko   26 Dec 2002 09:47:31 
 Re: быстpая соpтиpовка   Nick Kovaliov   26 Dec 2002 11:07:56 
 Re: быстpая соpтиpовка   Oleg I. Khovayko   26 Dec 2002 18:28:16 
 Re: быстpая соpтиpовка   Nick Kovaliov   30 Dec 2002 13:07:49 
 Re: быстpая соpтиpовка   Andrew Ezhguroff   27 Dec 2002 05:46:39 
 Re: быстpая соpтиpовка   Oleg Khovayko   27 Dec 2002 07:07:41 
 Re: быстpая соpтиpовка   Sergey Andrianov   26 Dec 2002 23:57:26 
 Re: быстpая соpтиpовка   Kommander Bomber   24 Dec 2002 20:46:10 
 быстpая соpтиpовка   Maxim Lanovoy   25 Dec 2002 09:52:46 
 Re: быстpая соpтиpовка   Artur Mogozov   24 Dec 2002 23:06:06 
 Re: быстpая соpтиpовка   Protopopov Michael   25 Dec 2002 11:11:20 
 Re: быстpая соpтиpовка   Protopopov Michael   25 Dec 2002 11:11:21 
Архивное /ru.algorithms/11522552a44a7.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional