Форум программистов, компьютерный форум CyberForum.ru

программа порозрядной сортировки - C++

Восстановить пароль Регистрация
 
V_Ghost
 Аватар для V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
19.04.2012, 11:44     программа порозрядной сортировки #1
Напишите пожалуйста алгоритм и програмку для порозрядного сортирования
плииз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
19.04.2012, 11:45     программа порозрядной сортировки #2
Алгоритмы сортировок
V_Ghost
 Аватар для V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
19.04.2012, 16:16  [ТС]     программа порозрядной сортировки #3
Nekto, а програмку? я же не шарю в этом
V_Ghost
 Аватар для V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
22.04.2012, 19:24  [ТС]     программа порозрядной сортировки #4
можете написать програмку для порозрядной сортировки?
надо чтобы можно было ввести даные, оно посортировало..
и вывело результат
алгоритм есть

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
36
37
38
39
40
 
typedef struct slist_ { 
  long val;
  struct slist_ *next; 
} slist;
 
// функция сортировки возвращает указатель на начало отсортированного списка 
slist *radix_list(slist *l, int t) {
  //  t - разрядность (максимальная длина числа) 
  int i, j, d, m=1;
  slist *temp, *out, *head[10], *tail[10];
  out=l;
 
  for (j=1; j<=t; j++) { 
    for (i=0; i<=9; i++)
      head[i] = (tail[i]=NULL);
 
    while ( l != NULL ) {
      d = ((int)(l->val/m))%(int)10;
      temp = tail[d];
      if ( head[d]==NULL ) head[d] = l;
      else temp->next = l;
      temp = tail[d] = l;
      l = l->next;
      temp->next = NULL;
    }
    for (i=0; i<=9; i++)
      if ( head[i] != NULL ) break;
    l = head[i];
    temp = tail[i];
    for (d=i+1; d<=9; d++) {
      if ( head[d] != NULL) { 
        temp->next = head[d];
        temp = tail[d];
      }
    }
    m*=10;
  }
  return (out);
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
22.04.2012, 20:23     программа порозрядной сортировки #5
сортировка списка???
V_Ghost
 Аватар для V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
22.04.2012, 20:27  [ТС]     программа порозрядной сортировки #6
Kuzia domovenok,
чисел
V_Ghost
 Аватар для V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
23.04.2012, 22:27  [ТС]     программа порозрядной сортировки #7
можете написать програмку для порозрядной сортировки?
надо чтобы можно было число, оно посортировало..
и вывело результат
Очень надо..
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
24.04.2012, 08:22     программа порозрядной сортировки #8
Байтовая интепретация LSD-алгоритма поразрядной сортировки на С++:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
void swaps(char* psz1, char* psz2);
bool iseqkey(char* psz1, char* psz2, int pos);
 
int main(void)
{
    static char ppsz[10][256] = { "apricot", "apple", "berry", "bagage", "back", "cran", "count", "cat", "dog", "dig" };
 
    int q = 0;
    while (q < 256)
    {
    for (int i = 0; i < 10; i++)
        for (int k = i+1; k < 10; k++)
            if (ppsz[k][q] < ppsz[i][q])
            {
                if (!iseqkey(ppsz[i],ppsz[k],q) && q > 0) 
                    continue;
                
                swaps((char*)ppsz[k],(char*)ppsz[i]);
            }
    q++;
    }
 
    for (int n = 0; n < 10; n++)
        printf("%s\n",ppsz[n]);
 
    printf("\n");
 
    _getch();
 
    return 0;
}
 
bool iseqkey(char* psz1, char* psz2, int pos)
{
    for (int i = pos-1; i >= 0; i--)
        if (psz1[i] != psz2[i])
            return false;
 
    return true;
}
 
void swaps(char* psz1, char* psz2)
{
    static char* psztemp = new char[256];
    strcpy(psztemp, psz1);
    strcpy(psz1, psz2); 
    strcpy(psz2, psztemp);
}
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
24.04.2012, 11:05     программа порозрядной сортировки #9
Реализация байт-интерпретации LSD-алгоритма порозрядной сортировки на С++ на примере
сортировки массива строк.


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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
void swaps(char* psz1, char* psz2);
bool iseqkey(char* psz1, char* psz2, int pos);
 
int main(void)
{
    static char ppsz[10][256] = { "apricot", "apple", "berry", "bagage", "back", "cran", "count", "cat", "dog", "dig" };
 
    int q = 0;
    while (q < 256)
    {
    for (int i = 0; i < 10; i++)
        for (int k = i+1; k < 10; k++)
            if (ppsz[k][q] < ppsz[i][q])
            {
                if (!iseqkey(ppsz[i],ppsz[k],q) && q > 0) 
                    continue;
                
                swaps((char*)ppsz[k],(char*)ppsz[i]);
            }
    q++;
    }
 
    for (int n = 0; n < 10; n++)
        printf("%s\n",ppsz[n]);
 
    printf("\n");
 
    _getch();
 
    return 0;
}
 
bool iseqkey(char* psz1, char* psz2, int pos)
{
    for (int i = pos-1; i >= 0; i--)
        if (psz1[i] != psz2[i])
            return false;
 
    return true;
}
 
void swaps(char* psz1, char* psz2)
{
    static char* psztemp = new char[256];
    strcpy(psztemp, psz1);
    strcpy(psz1, psz2); 
    strcpy(psz2, psztemp);
}
Добавлено через 1 час 3 минуты
Битовая интерпретация алгоритма поразрядной сортировки на С++:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
#define bit(reg,n) ((reg & ((int)pow((double)2,n))) ? 1 : 0) \
 
void printb(char ch);
void swap(char& ch1, char& ch2);
bool iseqkey(char& ch1, char& ch2, int pos);
 
int main(void)
{
    static char psz[256] = "5143289760";
 
    for (int q = 7; q >= 0; q--)
        for (int i = 0; psz[i] != '\0'; i++)
            for (int k = i+1; psz[k] != '\0'; k++)
                if (bit(psz[k],q) < bit(psz[i],q))
                {
                    if (!iseqkey(psz[i],psz[k],q) && q < 7)
                        continue;
 
                    swap(psz[k], psz[i]);
                }
 
    for (int i = 0; psz[i] != '\0'; i++)
    { 
        printf("%c - ",psz[i]); 
        printb(psz[i]); 
    }
    
    printf("\n");
 
    printf("%s\n",psz);
 
    _getch();
 
    return 0;
}
 
bool iseqkey(char& ch1, char& ch2, int pos)
{
    for (int i = pos+1; i < 8; i++)
        if (bit(ch1,i) != bit(ch2,i))
            return false;
 
    return true;
}
 
void swap(char& ch1, char& ch2)
{
    char temp = ch1;
    ch1 = ch2;
    ch2 = temp;
}
 
void printb(char ch)
{
    int size = sizeof(char) * 8;
    int *bits = new int[size];
    memset((void*)bits, 0, size);
 
    for (int n = 0; n < size; n++)
        bits[n] = 0;
 
    for (int i = 0; ch >= 1; i++, ch/=2)
        bits[i] = ch % 2;
    
    for (int k = size-1; k >= 0; k--)
        printf("%d ",bits[k]);
    printf("\n");
}
V_Ghost
 Аватар для V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
24.04.2012, 15:01  [ТС]     программа порозрядной сортировки #10
zitxbit, а можешь сделать, чтобы вместо static char ppsz[10][256] = { "apricot", "apple", "berry", "bagage", "back", "cran", "count", "cat", "dog", "dig" };
можно было ввести числа, а потом оно отсортировало и вывело результат?
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
24.04.2012, 15:07     программа порозрядной сортировки #11
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <conio.h>
#include <math.h>
 
#define bit(reg,n) ((reg & ((int)pow((double)2,n))) ? 1 : 0) \
 
void printb(char ch);
void swap(char& ch1, char& ch2);
bool iseqkey(char& ch1, char& ch2, int pos);
 
int main(void)
{
    static char psz[256] = "5143289760";
 
    for (int q = 7; q >= 0; q--)
        for (int i = 0; psz[i] != '\0'; i++)
            for (int k = i+1; psz[k] != '\0'; k++)
                if (bit(psz[k],q) < bit(psz[i],q))
                {
                    if (!iseqkey(psz[i],psz[k],q) && q < 7)
                        continue;
 
                    swap(psz[k], psz[i]);
                }
 
    for (int i = 0; psz[i] != '\0'; i++)
    { 
        printf("%c - ",psz[i]); 
        printb(psz[i]); 
    }
    
    printf("\n");
 
    printf("%s\n",psz);
 
    _getch();
 
    return 0;
}
 
bool iseqkey(char& ch1, char& ch2, int pos)
{
    for (int i = pos+1; i < 8; i++)
        if (bit(ch1,i) != bit(ch2,i))
            return false;
 
    return true;
}
 
void swap(char& ch1, char& ch2)
{
    char temp = ch1;
    ch1 = ch2;
    ch2 = temp;
}
 
void printb(char ch)
{
    int size = sizeof(char) * 8;
    int *bits = new int[size];
    memset((void*)bits, 0, size);
 
    for (int n = 0; n < size; n++)
        bits[n] = 0;
 
    for (int i = 0; ch >= 1; i++, ch/=2)
        bits[i] = ch % 2;
    
    for (int k = size-1; k >= 0; k--)
        printf("%d ",bits[k]);
    printf("\n");
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 15:53     программа порозрядной сортировки
Еще ссылки по теме:

C++ Программа для сортировки
Программа сортировки массива методом пузырька C++
Программа для сортировки массива строк C++

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

Или воспользуйтесь поиском по форуму:
V_Ghost
 Аватар для V_Ghost
9 / 9 / 0
Регистрация: 03.03.2011
Сообщений: 116
24.04.2012, 15:53  [ТС]     программа порозрядной сортировки #12
zitxbit,
библиотеку stdio.h забыл
не работает.. пишет сбой построения..
Yandex
Объявления
24.04.2012, 15:53     программа порозрядной сортировки
Ответ Создать тему
Опции темы

Текущее время: 19:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru