9 / 4 / 2
Регистрация: 30.04.2013
Сообщений: 25
1

Digital Sort строки

10.05.2013, 13:06. Показов 3246. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Небходимо реализовать цифровую сортировку строк. У меня крашится непонятно почему
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
spis *DigitalSort(spis *&S, int L)
{
 int j,i,d;
 spis *p;
 tle Q[4000];
 for (j=L;j>=0;j--)
  {
   for (i=0;i<256;i++)
    Q[i].tail=(spis *)&Q[i].head;
   p=S;
   while (p) 
     {
      d=p->digit[j];
      Q[d].tail->next=p; // здесь краш
      Q[d].tail=p; 
      p=p->next; 
     }
   p=(spis*)&S;
   for (i=0;i<256;i++)
    {
     if (Q[i].tail!=(spis *)&Q[i].head) 
      {
       p->next=Q[i].head;
       p=Q[i].tail;
      }
    }
   p->next=NULL; 
  }
}
Добавлено через 9 часов 48 минут
Дело в том, что код этой сортировки не мой... и я не могу точно понять смысл этих строк.
C++
1
2
Q[i].tail=(spis *)&Q[i].head;
p=(spis*)&S;
Добавлено через 2 часа 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
spis *DigitalSort(spis *&S, int L)
{
 int j,i;
 int d;
 spis *p;
 tle Q[4000];
 for (j=L-1;j>=0;j--) {
     for (i=0;i<4000;i++)
         Q[i].tail=(spis *)&Q[i].head;
     p=S;
     while (p) {
           d=int(p->key[j])+128;         
           Q[d].tail->next=p;
           Q[d].tail=p; 
           p=p->next; 
     }
     p=(spis*)&S;
     for (i=0;i<4000;i++) {
         if (Q[i].tail!=(spis *)&Q[i].head) {
            p->next=Q[i].head;
            p=Q[i].tail;
         }
     }
     p->next=NULL;
 }
}
почему то после кажого пробега по разряду уменьшается длинна очереди, остаются только элементы с одинаковым ключом сортировки.. и так на каждом шагу

Добавлено через 11 часов 59 минут
причем первым.. то есть если к примеру сортирую последовательность
Прпа
Крта
Капа
Норм
Пост

то сначала останется
Прпа
Крта
Капа

потом
Прпа
Капа

Потом
Капа
и на последнем шаге останется только
Капа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2013, 13:06
Ответы с готовыми решениями:

Ошибка 500 в менеджере модулей Joomla - Out of sort memory, consider increasing server sort buffer size
Привет! Подскажите что делать , когда такая проблема ?

Упорядочите строки по возрастанию методом сортировки выбором (Select Sort)
Здравствуйте! Пожалуйста помогите решить задачки. 1.Дан двумерный массив А(M, M) в виде...

Sort(), третий параметр: как sort() выбирает аргументы из переданной последовательности для переданной функции?
Вот sotr() 2 параметра - итераторы, а третий функцию. Допустим, моя функция сортирует список по...

Digital Works
Всем привет! Ребята, спасайте. Не могу схему построить. Простую схему я наклепал (!X3!X1!X0) ˅...

2
9 / 4 / 2
Регистрация: 30.04.2013
Сообщений: 25
11.05.2013, 18:20  [ТС] 2
ЗАРАБОТАЛО! оооочень долго парился по этому поводу, заработало таким образом, может кому поможет!)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
spis *DigitalSort(spis *S, int L){
 int j,i;
 int d;
 spis *p,*t;
 tle Q[256];
 bool b;
 for (j=L-1;j>=0;j--) {
     for (i=0;i<256;i++) Q[i].b=false;
     p=S;         
     while (p!=NULL) {
           d=int(p->key[j])+128;         
           if (!Q[d].b) {
              Q[d].head=Q[d].tail=p;
              Q[d].b=true;
           } else {
             Q[d].tail->next=p;
             Q[d].tail=p;
           }
           p=p->next; 
     }
     b=false;
     for (i=0;i<256;i++) {
         if (Q[i].b) {
            if (!b) {
               t=Q[i].head;
               b=true;
            } else p->next=Q[i].head;
            p=Q[i].tail;            
         }
     }
     p->next=NULL;
     S=t;
 }
 return S;
}
1
Hellraiser BCH
27.11.2013, 12:39 3
ulyxa117, не мог ты написать, как у тебя происходит инициализация и заполнение списка с последующим выводом.
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2013, 12:39
Помогаю со студенческими работами здесь

Western Digital CG (WD20EARS)
Доброго времени суток Форумчанам киберфорума. Мучаюсь с такой проблемой уже, наверное, больше года....

Настройка Digital Filter
нужно настроить Digital Filter так чтобы он стал согласованным для последовательности 1 1 1 1 1 1...

Western Digital Caviar
Здравствуйте. В поисках HDD &quot;получше&quot; узнал про такой, как Western Digital Caviar Black. Начал...

World Digital Library
ЮНЕСКО открыла всемирную цифровую библиотеку. Всемирная цифровая библиотека будет доступна на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru