PDA

View Full Version : مرتب سازی سریع



eas_m66
پنج شنبه 25 بهمن 1386, 19:50 عصر
سلام
من برنامه مرتب سازی سریع البته غیر بازگشتیش رو نوشتم ولی مشکل داره اگه می تونید کمکم کنید ممنون میشم.
کد:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#define size 5
void quick_sort (int arr[ ] ,int n);
class stack
{
public:
stack();
int empty();
void push(int x);
int pop(int &);
private:
int mytop;
int items[size];
};
stack::stack()
{
mytop=-1;
}
////////////////////////////
int stack::empty()
{
return (mytop==-1);
}
////////////////////////////
void stack::push(int x)
{
int overflow;
if(mytop==size-1)
overflow=1;
else
{
overflow=0;
items[++mytop]=x;
}
}
//////////////////////////
int stack::pop(int &x)
{
int underflow;
if(empty())
underflow=1;
else
{
underflow=0;
return x=items[mytop--];
}
}
/////////////////////////////////////////////////
int partition (int arr[ ] , int low , int high)
{
int lb = low + 1 , rb = high , temp , pivot = arr[ low ] , p;
while (lb <= rb)
{
while (arr[ lb ] <= pivot && lb <= rb)
lb++;
while (arr[ rb ] > pivot && lb <= rb)
rb--;
if (lb < rb)
{
temp = arr[ lb];
arr[ lb ] = arr[ rb];
arr[ rb ] = temp;
}
}
if (rb == high)
p = high;
else if(rb == low)
p = low;
else
p = lb-1;
arr[ low ] = arr[ p];
arr[ p ] = pivot;
return p;
}
void quick_sort (int arr[ ] ,int n)
{
stack st;
st.push(0);
st.push(n-1);
int low , p , high;
while(! st.empty())
{
high = st.pop(n);
low = st.pop(n);
p = partition(arr , low , high);
if (p > low)
{
st.push(low);
st.push(p-1);
}
if (p < high)
{
st.push(p + 1);
st.push(high);
}
}
}
int main()
{
int low,high,i,arr[10];
clrscr();
for(i=0;i<10;i++)
cin>>arr[i];
quick_sort(arr,i);
cout<<"arry:"<<arr[i];
getch();
return 0;
}

pesar irooni
پنج شنبه 25 بهمن 1386, 23:38 عصر
سلام دوست عزیز
مشکل برنامه ات اینه که شرط بررسی overflow ات اشتباهه و در برنامه ات Overflow رخ میده. size-1 میشه 4 و عدد 4 جزء اندیسهای صحیح آرایه item است چون size=5 و اندیسها از 0 تا 4 معتبره. اما برنامه شما اگه mytop=4 باشه که یه مقدار صحیح برای mytop است در برنامه ات Overflow رخ میده.
پس اگه شرط رو به mytop = size تغییر بدی برنامه درست عمل میکنه.

موفق باشی.

ICEMAN
شنبه 27 بهمن 1386, 19:53 عصر
اینجا مجموع معمول ترین تکنیک های sort و همراه سورس گذاشتم
http://barnamenevis.org/forum/showthread.php?goto=newpost&t=95224