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


Автор: Jater 2.11.2008, 15:10
Код
int partition (int * m, int a, int b) 
    {
      int i = a,tmp;
      for (int j = a; j <= b; j++)    // просматриваем с a по b
       {
         if (m[j] <= m[b])            // если элемент m[j] не превосходит m[b],
          {
            tmp=m[i];
            m[i]=m[j];
            m[j]=tmp; 
                                        // меняем местами m[j] и m[a], m[a+1], m[a+2] и так далее...
                                      // то есть переносим элементы меньшие m[b] в начало,
                                      // а затем и сам m[b] «сверху»
            i++;                      // таким образом последний обмен: m[b] и m[i], после чего i++
          }
       }
      return i-1;                     // в индексе i хранится <новая позиция элемента m[b]> + 1
    }
 
   int quicksort (int * m, int a, int b) // a - начало подмножества, b - конец
    {                                        // для первого вызова: a = 0, b = <элементов в массиве> - 1
     if (a >= b)
         return 0;
     int c = partition (m, a, b);
     quicksort (m, a, c-1);
     quicksort (m, c+1, b);
     return 0;
    }
Код
#include <math.h>
#include<iostream>
#include<time.h>
using namespace std;
int main()
{    int const nmax=100;
    int A[nmax],n,s;
    srand(time(0));
    cout<<"n: ";
    cin>>n;
    for (int i=0; i<n; i++)
    {  
        A[i]=rand()%100;                        // Заполнение массивов
    }
    for (int i=0; i<n; i++)
        cout<<A[i]<<" ";
    cout<<endl;
    s=quicksort(A,0,n);
    cout<<s;
    system("pause");
    return 0;
}
помогите вывести на экран отсортированный массив!!!!!

M
bsa
Пользуйся кнопкой "Код"

Модератор: Название темы должно отражать ее суть!

Автор: IKM2007 2.11.2008, 15:52
Jater, пользуйся кнопкой КОД.
Зачем в quicksort return-ы? Она должна быть рекурсивная, а у тебя выполняется всегда один раз. Должно быть так.
Код

void quicksort (int * m, int a, int b) // a - начало подмножества, b - конец
    {                                        // для первого вызова: a = 0, b = <элементов в массиве> - 1
     if (a < b)
     {
     int c = partition (m, a, b);
     quicksort (m, a, c-1);
     quicksort (m, c+1, b);
     }
    }


Вместо
Код

s=quicksort(A,0,n);
    cout<<s;

напиши
Код

quicksort(A,0,n-1);
   for (int i=0; i<n; i++)
        cout<<A[i]<<" ";


ты вызываешь quicksort для n, а надо n-1, так как индекс последнего элемента массива n-1.

И ещe лучше вместо
Код

 int A[nmax],n,s;
    srand(time(0));

написать
Код

int A[nmax],n;
    srand((unsigned int)time(NULL));

Автор: Jater 2.11.2008, 16:10
УРА!!!! работает!)) smile 

Автор: J0ker 2.11.2008, 19:28
абалдеть
значит как написать квиксорт - понимаем, а как организовать вывод - НЕ понимаем
свежо предание  smile 

Автор: bsa 6.11.2008, 00:39

M
bsa
Переименовал тему
Jater, если вопрос исчерпан, помечай тему решенной


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