PDA

View Full Version : سوال: سوال در مورد quick sort



hashemi85sep
سه شنبه 29 اردیبهشت 1388, 14:43 عصر
سلام دوستان و اساتيد گرامي
اين برنامه ايه كه خودم نوشتم ..
اگه ميشه يه نگا بهش بندازين و خطاهاو رفع كنين
ران ميشه ولي جواب نميده....

#include<iostream.h>
#include<conio.h>
int a[100];
int xchange(int & m,int & n);
int partition(int p,int r);
void quicksort(int p,int r)
{
int q;
if (p<r)
q=partition(p,r);
quicksort(p,q-1);
quicksort(q+1,r);
}
int partition(int p,int r)
{
int x,i,j;
x=a[r-1];
i=p-1;
for (j=p;j<r-1;j++)
if (a[j]<=x)
i=i+1;
xchange(a[i],a[j]);
xchange(a[r],a[i+1]);
return i++;
}
int xchange(int & m,int & n)
{
int temp=m;
m=n;
n=temp;
return(n,m);
}
int main()
{
int i,l;
cout<<"enter n:";
cin>>l;
for (i=0;i<l;i++)
cin>>a[i];
quicksort(0,l);
for(i=0;i<l;i++)
cout<<a[i];
getche();
}

tdkhakpur
سه شنبه 29 اردیبهشت 1388, 22:05 عصر
سلام:
برنامه ات ظاهرن باید کار کنه ولی شما یه اشکال در تابع بازگشتی داری بصورت زیر اصلاحش کن.
موفق باشید


void quicksort(int p,int r)
{
int q;
if (p<r){
q=partition(p,r);
quicksort(p,q-1);
quicksort(q+1,r);
}
}

hashemi85sep
پنج شنبه 31 اردیبهشت 1388, 12:25 عصر
سلام:
برنامه ات ظاهرن باید کار کنه ولی شما یه اشکال در تابع بازگشتی داری بصورت زیر اصلاحش کن.
موفق باشید


void quicksort(int p,int r)
{
int q;
if (p<r){
q=partition(p,r);
quicksort(p,q-1);
quicksort(q+1,r);
}
}

سلام دوست عزیز
جسارت نباشه و لی این مثل تابع خودمه ...

کسی دیگه نیست که بتونه کمک کنه ؟؟؟؟؟؟؟؟؟؟؟؟؟
!!!!!!!!!!!!!!

mehdi.mousavi
پنج شنبه 31 اردیبهشت 1388, 13:44 عصر
سلام دوست عزیز
جسارت نباشه و لی این مثل تابع خودمه ...

کسی دیگه نیست که بتونه کمک کنه ؟؟؟؟؟؟؟؟؟؟؟؟؟
!!!!!!!!!!!!!!

خیر! یه {} بیشتر داره! دقت کنید!

پاورقی: البته فرصت تست کردنش رو ندارم، اما تفاوتش تو {} هست!

tdkhakpur
پنج شنبه 31 اردیبهشت 1388, 14:58 عصر
سلام:
دوست گرامی اینو همیشه به خاط بسپار (یه دشمن عاقل بهتر از صد دوست نادانه.)
اگه میخواستم تابع برای حل مشکل شما رو بهت ارسال میکردم ولی خواستم خودت انجامش بدی.
کد زیر رو استفاده کن.


// quick sort
void QickSort ( int *buff, int left, int right )
{
int i, temp, j, temp2;
i = left; j = right;
temp = buff[(j+i)/2] ;
do{
while ( buff[i] < temp && i < right) i++ ;
while ( buff[j] > temp && j > left ) j-- ;
if ( i<= j )
{
temp2 = buff[i]; buff[i]=buff[j]; buff[j]=temp2;
i++; j--;
}
} while ( i <= j ) ;
if( j > left ) QickSort ( buff , left, j );
if( i < right) QickSort ( buff , i , right );
}