Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Рекурсивная Сортировка Разделением


Автор: Feldor 21.12.2005, 13:38
Не удается сделать эту сортировку, так как рекурсия идет не так как надо =(
Приблизительный алгоритм этой сортировки такой:

Код

void sort(int in[], int a, int b){
int i;
if (a==b) return;
                                   // Разделить массив в интервале a..b
                                          // на две части a..i-1 и i..b
                         // относительно значения v по принципу <v, >=v
sort(in,a,i-1); sort(in,i,b);}


Вот моя ерсию, которая по непонятным мне причинам не работает: smile

Код

void sort(int A[], int a, int b)
{
  int i,k,j,sum;
  int B[10];
  double m;

  if (a>=b) return;
  
  for (k=a, sum=0;k<=b;k++)
    {
        sum+=A[k];
    }
  m=sum/k;

    for(i=j=a, k=b ;i<=b; i++)
    {
        if (A[i]<m) B[j++]=A[i];
        else B[k--]=A[i];
    }

    for (i=a;i<=b;i++)
    {
        A[i]=B[i];
    }

  sort(A,a,j-1);
  sort(A,j+1,b);
}

void main()
{
    int A[10]={5,2,7,4,8,9,3,2,4,7};

        sort(A,0,9);

    for (int i=0;i<9;i++)
    {
        printf("%d ",A[i]);
    }
}


Заранее благодарю за помощь...

Автор: Feldor 21.12.2005, 16:21
Прошу, пожалуйста, подскажите сегодня... потому что завтра уже все =(
От этого очень многое зависит...

По поводу программы: обязательно в задании нужно использовать вспомогательный массив.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)