Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

То ли зацикливается, то ли что... quicksort

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> То ли зацикливается, то ли что... quicksort
Имя
Сообщение << Старые топики   Новые топики >>
То ли зацикливается, то ли что... quicksort - 2011-04-08 13:03:39.143333   
BRAT2

Сообщений: 44
Оценки: 0
Присоединился: 2007-11-06 13:00:18.763333
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;stdio.h&gt; #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- int *a; int X; void __fastcall TForm1::Button2Click(TObject *Sender) { this-&gt;OpenDialog1-&gt;Execute(); AnsiString s=this-&gt;OpenDialog1-&gt;FileName; FILE *fp; fp=fopen(s.c_str(),"r"); char str[250]; X=0; for(;fgets(str,250,fp)!=NULL;X++); fseek(fp,0,SEEK_SET); a=new int[X]; in-&gt;Caption="in = "; for (int i=0;i&lt;X;i++) { a[i]=atoi(fgets(str,250,fp)); in-&gt;Caption=in-&gt;Caption+" "+IntToStr(a[i]); } fclose(fp); } //--------------------------------------------------------------------------- void Qsort(int * m, int n) { int i=0, j=n-1;int l; int p=m[n/2]; do{ while (m[i]&lt;p) i++; while (m[j]&gt;p) j--; if (i&lt;=j) { int c=m[i]; m[i]=m[j]; m[j]=c; i++;j--; } }while(j&lt;=i); if (j&gt;0) Qsort(m,n); if (n&gt;i) Qsort(m+i,n-i); } void __fastcall TForm1::Button1Click(TObject *Sender) { int q; Qsort(a,X);; out-&gt;Caption="out = "; for (int i=0;i&lt;X;i++) { out-&gt;Caption=out-&gt;Caption+" "+IntToStr(a[i]); } } //--------------------------------------------------------------------------- in и out это компоненты формы - Label'ы. Из файла все правильно читает массив и выводит. Но вот когда выполняется кликаю на Button1 зависает и все. В чем дело, кто подскажет… Qsort - обычная "быстрая сортировка"
Post #: 1
RE: То ли зацикливается, то ли что... quicksort - 2011-04-08 13:09:42.550000   
BRAT2

Сообщений: 44
Оценки: 0
Присоединился: 2007-11-06 13:00:18.763333
исправил
}while(j&lt;=i); на }while(i&lt;=j); теперь выводит ошибку во время клика в строке
int i=0, j=n-1;
Post #: 2
RE: То ли зацикливается, то ли что... quicksort - 2011-04-08 19:39:57.570000   
Klofelin

Сообщений: 68
Оценки: 0
Присоединился: 2010-09-03 20:58:52.116666
void Qsort(int * m, int n) { int i=0, j=n; int p=m[n/2]; do{ while (m[i]&lt;p) i++; while (m[j]&gt;p) j--; if (i&lt;=j) { int c=m[i]; m[i]=m[j]; m[j]=c; i++;j--; } }while(i&lt;=j); if (j&gt;0) Qsort(m,j); if (n&gt;i) Qsort(m+i,n-i); } Вызов должен быть таким: Qsort(a,X-1); ( если m[X-1] - это у тебя последний элемент массива)
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> То ли зацикливается, то ли что... quicksort







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.