9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
1

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

19.04.2012, 11:44. Показов 1126. Ответов 11
Метки нет (Все метки)

Напишите пожалуйста алгоритм и програмку для порозрядного сортирования
плииз
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2012, 11:44
Ответы с готовыми решениями:

Программа сортировки
Помогите пожалуйста написать программу для сортировки массива, которая парные элементы ставит в...

Программа для сортировки
Здраствуйте, необходимо написать программу в которуй будет 12 случайных элементов, затем нужно...

Не работает программа сортировки
#include "iostream" void CountingSort(long long* a,int n,int*c,int byte,int k); void MSDSort(long...

Программа сортировки списка
Помогите сделать программу пожалуйста. Программа считывает информацию о студентах (имя, оценка...

11
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
19.04.2012, 11:45 2
Алгоритмы сортировок
0
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
19.04.2012, 16:16  [ТС] 3
Nekto, а програмку? я же не шарю в этом
1
9 / 9 / 1
Регистрация: 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);
}
0
3652 / 2989 / 828
Регистрация: 25.03.2012
Сообщений: 11,024
Записей в блоге: 1
22.04.2012, 20:23 5
сортировка списка???
0
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
22.04.2012, 20:27  [ТС] 6
Kuzia domovenok,
чисел
0
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
23.04.2012, 22:27  [ТС] 7
можете написать програмку для порозрядной сортировки?
надо чтобы можно было число, оно посортировало..
и вывело результат
Очень надо..
0
96 / 748 / 279
Регистрация: 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);
}
1
96 / 748 / 279
Регистрация: 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");
}
2
9 / 9 / 1
Регистрация: 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" };
можно было ввести числа, а потом оно отсортировало и вывело результат?
0
96 / 748 / 279
Регистрация: 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");
}
1
9 / 9 / 1
Регистрация: 03.03.2011
Сообщений: 116
24.04.2012, 15:53  [ТС] 12
zitxbit,
библиотеку stdio.h забыл
не работает.. пишет сбой построения..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2012, 15:53
Помогаю со студенческими работами здесь

программа сортировки методом пузырька
Доброго времени суток! Прошу помощи в написании программы с требованиями: •Входные данные –...

Программа для сортировки массива строк
Нужно написать программу для сортировки строк, используя указатели. Программа должна считать...

Программа сортировки массива методом пузырька
Здравствуйте! Пожалуйста, помогите написать программу! Вот задание: Создать на C++ Builder...

Демонстрационная программа сортировки методом «пузырек»
Демонстрационная программа сортировки методом «пузырек» Размер массива не превышает 40 и задается с...


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

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

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