مشکل در اجرا Quick sort - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۲۷۹ نفر آنلاین
۸۱ عضو و ۱۹۸ مهمان در سایت حاضرند

مشکل در اجرا Quick sort

0 امتیاز

سلام

با اجرا کد زیر به مشکل می خورم :

 


#include <iostream>
#include<conio.h>
	using namespace std;
	int *a;
	void quick(int a[], int p, int r);
	int part(int a[], int p, int r);
	void main()
	{
		int i, x, p, r, j;
		cout << "Enter size of array:\n";
		cin >> x;
		cout << "\n";
		a = new int[x];
		p = a[0];
		r = a[x];
		cout << "Enter your Numbers for ordering:\n";
		for (i = 0; i <= x; i++)
		{
			cin >> a[i];
		}
		quick(a, p, r);
		for (j = 0; j <= x; j++)
			cout << a[j];
		delete[] a;
		getch();
	}

	void quick(int a[], int p, int r)
	{
		int q;
		if (p < r)
			q = part(a, p, r);
		quick(a, p, q - 1);
		quick(a, q + 1, r);
	}
	int part(int a[], int p, int r)
	{
		int x, i, j;
		x = a[r];
		i = p - 1;
		for (j = p; j <= r - 1; j++)
		{
			if (a[j] <= x)
			{
				i = i + 1;
				swap(a[i], a[j]);
			}
		}
		swap(a[i + 1], a[r]);
		return i + 1;
	}

 

سوال شده اسفند 19, 1392  بوسیله ی Pakniat (امتیاز 247)   9 21 32
ویرایش شده اسفند 19, 1392 بوسیله ی مصطفی ساتکی
اندیس آرایه از 0 میشه شروع میشه تا یکی قبل از تعداد خونه ها  پس اینا اشتباهن
 i <= x باید باشه i<x
r = a[x این هم همین طور r=a[x-1
بقیه جاهای کد هم به همین شکل باید عوض بشن

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

ممنون از تذکرتون

غیر از اون مورد 2 اشکال مفهومی هم داشتم که در خط 14 و 15 مشهوده اصلاح شده کد :

#include <iostream>
#include<conio.h>
using namespace std;

void quick(int a[],int p,int r);
int part(int a[],int p,int r);
void main()
{
	int *a,i,x,p,r,j;
	cout<<"Enter size of array:\n";
	cin>>x;
	cout<<"\n";
	a=new int[x];
	p=0;
	r=x-1;
	cout<<"Enter your Numbers for ordering:\n\n";
	for(i=0;i<x;i++)
		cin>>a[i];
	cout<<"\n\n";
	quick(a,p,r);
	for(j=0;j<x;j++)
	{
		cout<<a[j];
		if(j<x-1)cout<<" <= ";
		if(j==x-1)cout<<" > ";
	}
	delete[] a;
	getch();
	}

void quick(int a[],int p,int r)
	{
	int q;
	if(p<r)
	{
		q=part(a,p,r);
		quick(a,p,q-1);
		quick(a,q+1,r);
	}
	}
int part(int a[],int p,int r)
	{
	int x,i,j;
	x=a[r];
	i=p-1;
	for(j=p;j<=r-1;j++)
	{
		if(a[j]<=x)
		{
			i=i+1;
			swap(a[i],a[j]);
		}
	}
	swap(a[i+1],a[r]);
	return i+1;
	}





 
 

پاسخ داده شده اسفند 19, 1392 بوسیله ی Pakniat (امتیاز 247)   9 21 32
انتخاب شد اسفند 19, 1392 بوسیله ی BlueBlade
...