сортировка подсчетом

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
я не могу понять почему первый элемент из начального массива после сортировки зануляется . Я знаю что ошибка где-то в сортировке, а точнее в индексах. А где точнее найти не могу. Помогите пожалуйста.
#include<iostream>
#include<time.h>
using namespace std;
const int n_max=100;
const int m_max=255;
int a[n_max], b[n_max], c[ m_max], n, j, i;
void main()
{
setlocale(LC_ALL, ".1251");
cout<<"Введите размерность массива\n";
cin>>n;
if(n>n_max)
{
cout<<"Введеное значение превышает допустимое\n";
}
else
{
srand(time(0));
for (i=0; i<n;i++)
a=rand()%10;// заполняем массив случайными числами
for (i=0; i<n; i++)
cout<<a<<" ";
cout<<endl;
/*далее идет сортировка подсчетом*/
for(i=0; i<m_max; i++) c=0; /*создаем новый массив и зануляем его элементы*/
for(i=1; i<n; i++) c[a]++; /*к элементам массива с с индексами равными элементам массива а прибавляем 1*/
for(i=1; i<m_max; i++) c+=c[i-1];/*добовляем к каждому элементу массива с сумму предшествующих элементов */
for(i=n; i>=1; i--) /*избегаем возможности записи двух одинаковых элементов в одну ячейку*/
{
b[c[a]]=a;
c[a]=c[a]-1;
}

for(c[a]=1; c[a]<=n; c[a]++) cout<<b[c[a]]<<" ";
cout<<endl;
}
}.
 
@

@LE}{@NDER

#2
Несмотря на нездоровое использование индексации, в глаза бросились 2 цикла:
for(i=1; i<n; i++) c[a]++; /*к элементам массива с с индексами равными элементам массива а прибавляем 1*/
for(i=1; i<m_max; i++) c+=c[i-1];/*добовляем к каждому элементу массива с сумму предшествующих элементов */

похоже, массив начнет проход со 2го элемента.

Второй ньюанс, массив a заполняется случайными числами от нуля до 10 - rand()%10; Поскольку каких либо проверок не заметил, нет никаких гарантий, что 0 будет в списке элементов, соответственно, нет гарантий, что 0й элемент в массиве c[] будет проинициализирован.

если конечно, я все правильно понял....
 
G

Guest

#4
Ура я поняла в чем дело, я ошиблась в алгоритме . Насамом деле алгоритм выглядит так:
for(j=0; j<m_max; j++) c[j]=0;
for(i=0; i<n; i++) c[a+1]++;
for(j=0; j<m_max; j++) c[j]+=c[j-1];
for(i=0;i<n;i++) b[c[a]++]=a;
for(i=0;i<n;i++) a=b;
 
Статус
Закрыто для дальнейших ответов.