منبع اصلی نوشتار زیر در این لینک قرار دارد

الگوریتم های مرتب سازی : Quick sort

 

 

 Quick sort الگوریتم های مرتب سازی : Quick sort

در دو پست قبل مفهوم مرتب سازی و مرتب سازی حبابی (Bubble sort)   را بررسی کردیم  .امروز می خواهیم به  مرتب سازی سریع  (Quick sort ) بپدازیم .قبل از این که به ادامه بحث بپردازیم یک مرور بکنیم از سایر الگوریتم ها که در روز های آینده آن ها را بررسی خواهیم کرد:

– مفهوم مرتب سازی

bubble sort

-insertion sort

-merge sort

-quick sort

-Distribution sorts

– Concurrent sorts

– Heap sort

-Radix sort

– Counting sort

مرتب سازی سریع یکی از بهترین الگوریتم های مرتب سازی  است است که سرعت بسیار مناسبی دارد و اگر درست پیاده سازی شود یکی از سریع ترین الگوریتم ها خواهد بود . Quick sort  یک روش سورت بازگشتی است ، البته ممکن است این سوال برای شما پیش بیاید اگر بازگشتی است پس چرا می گوییم از لحاظ حافظه و سرعت خوب است دلیلش این است که این الگوریتم دقیقا فیت کش است .

هسته quick sort تابع patition  است .

تابع  partition   :

 

 

//partition function
int partition( int A[], int p, int q)
{
	int temp;
	int x = A[p];
	int i = p;
	for (int j = p+1; j <= q; j++)
	{
		if (A[j] <= x)
		{
			i++;
			temp = A[j];
			A[j] = A[i];
			A[i] = temp;
		}
	}
	temp = A[i];
	A[i] = A[p];
	A[p] = temp;
	return i;
}
//

این تابع عنصر اول بازه ای را که قرار است رویش عمل کند را در نظر می گیرد  و بعد این تابع عنصر ها رو به ۲ دسته تقسیم می کند آن هایی که بزرگ تر از عنصر اول هستند و آن هایی که کوچک تر از عنصر اول هستند و عنصر اول را بین این دو دسته قرار می دهد و بعد مکانی را که عنصر ما بین این دو دسته قرار دارد را بر می گرداند . اول کد بالا را خوب نگاه کنید و بعد عکس های زیر را ببینید تا تابع partition  را بهتر درک کنید :

partition job الگوریتم های مرتب سازی : Quick sort

 

 

partition 1 الگوریتم های مرتب سازی : Quick sort

partition 2 الگوریتم های مرتب سازی : Quick sortpartition 3 الگوریتم های مرتب سازی : Quick sortpartition 4 الگوریتم های مرتب سازی : Quick sort

 

partition 6 الگوریتم های مرتب سازی : Quick sort

partition 7 الگوریتم های مرتب سازی : Quick sort

 

partition 9 الگوریتم های مرتب سازی : Quick sort

partition 10 الگوریتم های مرتب سازی : Quick sort

حالا می رویم سراغ خود تابع مرتب سازی سریع   Quick sort  :

//quick sort
void Quick_sort( int A[], int p,int r)
{
	int q;
	if( p<r)
	{
		q = partition(A,p,r);
		Quick_sort( A, p, q-1);
		Quick_sort( A, q+1, r);
	}
}
//

همین طور که می بینید quick sort  یک الگوریتم بازگشتی است که مرتب  partition  و خود را را فرا می خواند این کار را می کند تا زمانی که  آرایه هایی به طول یک به دست آید  و آرایه به طول یک خود مرتب است و اینگونه است که با استفاده از روش تقسیم و حل می توانیم آرایه را سورت کنیم.

در کد زیر تابع پارتیشن (تقسیم) و مرتب سازی سریع به همراه یک تست در Main  آمده است :

// quick sort.cpp : open-mind.ir
// farhad dalirani
//

#include "stdafx.h"
#include <iostream>

using namespace std;
//partition function
int partition( int A[], int p, int q)
{
	int temp;
	int x = A[p];
	int i = p;
	for (int j = p+1; j <= q; j++)
	{
		if (A[j] <= x)
		{
			i++;
			temp = A[j];
			A[j] = A[i];
			A[i] = temp;
		}
	}
	temp = A[i];
	A[i] = A[p];
	A[p] = temp;
	return i;
}
//

//quick sort
void Quick_sort( int A[], int p,int r)
{
	int q;
	if( p<r)
	{
		q = partition(A,p,r);
		Quick_sort( A, p, q-1);
		Quick_sort( A, q+1, r);
	}
}
//

int main()
{
	//one example
	int i;
	int A[9] = {9,5,7,3,2,1,4,6,0};

	//print array before sort
	for (int i = 0; i < 9; i++)
	{
		cout << A[i]<<" ";
	}
	cout << endl;
	//

	Quick_sort(A,0,8);

	//print array after sort
	for (int i = 0; i < 9; i++)
	{
		cout << A[i]<<" ";
	}
	cout << endl;
	//

	return 0;
}

 

digg الگوریتم های مرتب سازی : Quick sort  reddit الگوریتم های مرتب سازی : Quick sort  stumbleupon الگوریتم های مرتب سازی : Quick sort  yahoo buzz الگوریتم های مرتب سازی : Quick sort  dzone الگوریتم های مرتب سازی : Quick sort  facebook الگوریتم های مرتب سازی : Quick sort  delicious الگوریتم های مرتب سازی : Quick sort  dotnetkicks الگوریتم های مرتب سازی : Quick sort  dotnetshoutout الگوریتم های مرتب سازی : Quick sort  linkedin الگوریتم های مرتب سازی : Quick sort  technorati الگوریتم های مرتب سازی : Quick sort  twitter الگوریتم های مرتب سازی : Quick sort  google buzz الگوریتم های مرتب سازی : Quick sort  



برچسب ها : , , , , , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد