eas_m66
پنج شنبه 25 بهمن 1386, 20: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;
}
من برنامه مرتب سازی سریع البته غیر بازگشتیش رو نوشتم ولی مشکل داره اگه می تونید کمکم کنید ممنون میشم.
کد:
#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;
}