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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа про Stack http://www.cyberforum.ru/cpp-beginners/thread803178.html
Помогите пожалуйста, решить программу про Stack. The input file should be HomeworkSixInput.txt, provided by the assignment. This file has one postfix notation expression per line. (You can test...
C++ Что-то не могу въехать в задание Написать функцию которая получает в качестве аргумента указатели к двум переменным типа int, которая изменяет значение указанных переменных, только тогда, когда указанная через второй аргумент... http://www.cyberforum.ru/cpp-beginners/thread803148.html
C++ обработка файлов
товарищи подскажите что не так??? заранее благодарен!!! суть задачи следующая: "Найти максимальный из отрицательных элементов в файле целых чисел." То есть в той же папке что и программа я создаю...
C++ Рекурсивные функции. В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму отрицательных элементов. Упорядочить элементы
2) 2. В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму отрицательных элементов. Упорядочить элементы массива по возрастанию.
C++ Разработайте класс MONEY http://www.cyberforum.ru/cpp-beginners/thread803139.html
Задание 1: Разработка класса. Разработайте класс MONEY. Элемент класса: рубли; копейки. Методы: конструктор без параметров ( по умолчанию); конструктор с параметрами; ...
C++ Перезагрузка функций 1 С помощью механизма перегрузки функций реализовать функции для нахождения суммы: 1) 2-х чисел; 2) 2-х строк; 3) строки и числа; 4) числа и строки. подробнее

Показать сообщение отдельно
TonyPride
2 / 2 / 1
Регистрация: 22.10.2012
Сообщений: 47

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

08.03.2013, 09:59. Просмотров 1405. Ответов 5
Метки (Все метки)

Дан массив двоичных чисел, нужно отсортировать его с помощью поразрядной сортировки, начиная со старшего разряда, функция должна быть рекурсивной. Никак не могу записать разбиение массива на части (вначале делится пополам, потом на 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
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#define L 16
 
int binary (int n)
{
    while (n>0)
    {
          if (n%10>1) return 0;
          n=n/10;
    } 
    return 1;
}
 
int binmass(int A[], int &N)
{
    while(1)
    {
    printf ("Print N (2-%d)\n", L);
    scanf ("%d", &N);
    if (N>1 && N<L)
    {
         break;
    }
    else
    {
        printf ("Incorrect value\n");
    }
    }
    int bit=0;
    while (1)
    {
          printf ("Enter max bit < 5\n");
          scanf ("%d", &bit);
          if (bit<5) break;
          else printf ("Incorrect value\n");
    }
    for (int i=0; i<N; i++)
    {
        while(1)
        {
                printf ("\nEnter %d element\n", i+1);
                scanf ("%d", &A[i]);
                if (binary(A[i]) && A[i]<pow(10,bit)) break;
                else printf ("Incorrect element\n");
        }
    }
    return bit;
}
 
 
 
void binsort (int A[], int N, int bit, int key) // собственно, сама сортировка
{
 if (bit<0) return;
 int i=0, j=key-1, a=0, b=j, c=0, count=0, count1=0, T=0;
 for (i=0; i<N; i++, count++)
 {
     if (count+1==key) {i=i+1+key; count=0; j=i-1+key*2;}
     else j=b;
     c=A[i]/pow(10,bit);
     if (c%10==1) 
     {
                  a=A[i];
                  for (count1=0; count1<key; count1++, j--)
                  {
                      c=A[j]/pow(10,bit);
                      if (c%10==0) {A[i]=A[j]; A[j]=a; T=1;}
                  }
     }
     
 }
 if (T==0) binsort (A, N, bit-1, key);
 else  binsort (A, N, bit-1, key/2);
}
 
int main()
{
    int A[L], N=0, i=0;
    int bit=binmass (A, N);
    binsort (A, N, bit-1, N/2);
    printf ("Result\n");
    for (i=0; i<N; i++)
    {
        printf ("%d\n", A[i]);
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru