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

Тема в разделе "MS Visual C++", создана пользователем -, 23 дек 2008.

Статус темы:
Закрыта.
  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;
    }
    }.
     
  2. @LE}{@NDER

    @LE}{@NDER Гость

    Несмотря на нездоровое использование индексации, в глаза бросились 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[] будет проинициализирован.

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

    спасибо за помощь
     
  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;
     
Загрузка...
Похожие Темы - сортировка подсчетом
  1. vera2014
    Ответов:
    0
    Просмотров:
    1.071
  2. Liori
    Ответов:
    2
    Просмотров:
    1.005
  3. FCDK
    Ответов:
    0
    Просмотров:
    1.264
  4. ленарано
    Ответов:
    1
    Просмотров:
    1.103
  5. Creder
    Ответов:
    0
    Просмотров:
    1.345
Статус темы:
Закрыта.

Поделиться этой страницей