Перейти к содержанию

Быстрая сортировка на Си


Рекомендуемые сообщения

Имею проблему.

На входе есть массив a с максимальным количеством элементов n=8.

Листинг сортировки:


      double * quick(double *s,int low,int hi)
      { double cnt,aux;
        int i,j;
        if (hi>low)
           { i=low;
             j=hi;
             cnt=s;
             while(i < j)
             {  if (s[i+1]<=cnt)
                {  s=s[i+1];
                   s[i+1]=cnt;
                   i++;
                }
                else
                {  if (s[j]<=cnt)
                   {  aux=s[j];
                      s[j]=s[i+1];
                      s[i+1]=aux;
                    }
                   j--;
                }
             }
             quick(s,low,i-1);
             quick(s,i+1,hi);
           }
        return(s);
     }

Как увязать с имеющимися данными? Буду признателен за конечный код. Сдача завтра.( Поиск в Инете ничего не дал...

P/S/

Мне главное рабочий пример. Дальше сам разберусь.)

Ссылка на комментарий
Поделиться на другие сайты

Примера не дам, могу так прикинуть Smile

Судя по коду, функции скармливается указатель на начало массива, индекс элемента, с которого надо начинать сортировку и индекс элемента, на котором сортировку надо заканчивать. Для сортировки всего массива a[n] вызов ф-ии должен выглядеть как quick (a, 0, n - 1). И что Вас тут смущает? Smile

Ссылка на комментарий
Поделиться на другие сайты

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
const n=8;
int a[n],i,w;
void main()
{
printf("Введите 8 численных элементов массива: \n");
 {for(i=0;i<n;i++)
  scanf("%d",&a);}
double * qsort (a, 0, n - 1)
      { double cnt,aux;
        int i,j;
        if (hi>low)
           { i=low;
             j=hi;
             cnt=s;
             while(i < j)
             {  if (s[i+1]<=cnt)
                {  s=s[i+1];
                   s[i+1]=cnt;
                   i++;
                }
                else
                {  if (s[j]<=cnt)
                   {  aux=s[j];
                      s[j]=s[i+1];
                      s[i+1]=aux;
                    }
                   j--;
                }
             }
             qsort(s,low,i-1);
             qsort(s,i+1,hi);
           }
        return(s);
     }
}

Не пашет.(((
P/S/
Благодарю за внимание.)))
Ссылка на комментарий
Поделиться на другие сайты

Very HappyLaughingVery HappyLaughingVery HappyLaughing

Ой, извините, не удержался. Вы, наверное, с Паскалем раньше работали? Вложенные описания функций - это ж просто ахтунг LaughingLaughingLaughing Или это у Вас не описания, а вызовы???

Вот Вам работающий исходник:

#include <stdio.h>


double* quick (double *s, int low, int hi)
{
    double cnt,aux;
    int i,j;

    if (hi > low)
    {
        i = low;
        j = hi;
        cnt = s;

        while (i < j)
        {
            if (s[i+1] <= cnt)
            {
                s = s[i+1];
                s[i+1] = cnt;
                i++;
            }
            else
            {
                if (s[j] <= cnt)
                {
                    aux = s[j];
                    s[j] = s[i+1];
                    s[i+1] = aux;
                }
                j--;
            }
        }

        quick(s,low,i-1);
        quick(s,i+1,hi);
    }
    return (s);
}

int main ()
{
    double a[8] = {1, 3, 2, 76, 123, 0, 4, 1};
    int i;
    int n = 8;

    quick (a, 0, n - 1);
    for (i = 0; i < n; i++)
        printf ("%f\n", a);
}
Ссылка на комментарий
Поделиться на другие сайты

Чтоб темы не плодить - проблемка с графикой. Ошибки не пишет компилятор, но не работает. Работа этого же кода на другом компе - корректна. Видюха - GeForce 4mx 440 - может у кого есть библиотека под нее?

Ссылка на комментарий
Поделиться на другие сайты

Вы думаете, все, кто может Вам ответить, читают все темы подряд? Вряд ли. И задав в этом треде вопрос, темы треда не касающийся, Вы рискуете быть просто незамеченным Smile. Если вопрос по графике - создайте соотв. тему. Один тред - для одной проблемы.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...