جاوا میں فوری ترتیب کی وضاحت کی گئی۔

Quick Sort Java Explained



کوئیک سارٹ ، جسے کوئکسورٹ بھی کہا جاتا ہے ، ایک فہرست چھانٹنے کی اسکیم ہے جو تقسیم اور فتح کے نمونے کو استعمال کرتی ہے۔ کوئیک ترتیب کے لیے مختلف اسکیمیں ہیں ، سب تقسیم اور فتح کے نمونے کا استعمال کرتے ہوئے۔ فوری ترتیب کی وضاحت کرنے سے پہلے ، قاری کو ایک فہرست یا ذیلی فہرست کو آدھا کرنے کے لیے کنونشن اور تین اقدار کا درمیانی ہونا ضروری ہے۔

حلنگ کنونشن۔

جب کسی فہرست میں عناصر کی تعداد یکساں ہو تو ، فہرست کو آدھا کرنے کا مطلب ہے کہ فہرست کا لفظی پہلا نصف پہلا نصف ہے ، اور فہرست کا لفظی دوسرا نصف دوسرا نصف ہے۔ پوری فہرست کا وسط (درمیانی) عنصر ، پہلی فہرست کا آخری عنصر ہے۔ اس کا مطلب ہے کہ درمیانی انڈیکس لمبائی / 2 - 1 ہے ، کیونکہ انڈیکس کی گنتی صفر سے شروع ہوتی ہے۔ لمبائی فہرست میں عناصر کی تعداد ہے۔ مثال کے طور پر ، اگر عناصر کی تعداد 8 ہے ، تو فہرست کے پہلے نصف میں 4 عناصر ہیں اور فہرست کے دوسرے نصف حصے میں بھی 4 عناصر ہیں۔ یہ ٹھیک ہے. چونکہ انڈیکس کی گنتی 0 سے شروع ہوتی ہے ، درمیانی انڈیکس 3 = 8/2 - 1 ہے۔







کیس کا کیا ہوگا ، جب فہرست یا ذیلی فہرست میں عناصر کی تعداد عجیب ہو؟ شروع میں ، لمبائی اب بھی 2 سے منقسم ہے۔ کنونشن کے مطابق ، اس تقسیم کے پہلے نصف میں عناصر کی تعداد لمبائی / 2 + 1/2 ہے۔ انڈیکس کی گنتی صفر سے شروع ہوتی ہے۔ درمیانی انڈیکس لمبائی / 2 - 1/2 کے ذریعہ دیا گیا ہے۔ یہ کنونشن کے لحاظ سے درمیانی اصطلاح سمجھا جاتا ہے۔ مثال کے طور پر ، اگر کسی فہرست میں عناصر کی تعداد 5 ہے ، تو درمیانی انڈیکس 2 = 5/2 - 1/2 ہے۔ اور ، فہرست کے پہلے نصف میں تین عناصر اور دوسرے نصف میں دو عناصر ہیں۔ پوری فہرست کا درمیانی عنصر انڈیکس 2 میں تیسرا عنصر ہے ، جو درمیانی انڈیکس ہے کیونکہ انڈیکس کی گنتی 0 سے شروع ہوتی ہے۔



اس طرح تقسیم عددی ریاضی کی ایک مثال ہے۔



تین اقدار کا میڈین۔

سوال: تسلسل کا درمیانی حصہ کیا ہے؟





سی بی اے

حل:
فہرست کو بڑھتے ہوئے ترتیب میں ترتیب دیں:



اے بی سی

درمیانی اصطلاح ، بی ، میڈین ہے۔ یہ وہ شدت ہے جو دوسرے دو وسعتوں کے درمیان واقع ہے۔

فہرست میں میڈین کی تلاش اس قسم کی نہیں ہے۔ مثال کے طور پر ، غیر ترتیب شدہ 19 عناصر کی فہرست میں ، پہلے عنصر ، درمیانی عنصر اور آخری عنصر کے لیے میڈین کی ضرورت پڑ سکتی ہے۔ یہ تین اقدار بڑھتے ہوئے ترتیب میں نہیں ہوسکتی ہیں اور اس طرح ، ان کے اشاریوں کو مدنظر رکھا جانا چاہیے۔

فوری ترتیب کے ساتھ ، پوری فہرست اور ذیلی فہرستوں کے لیے میڈین درکار ہے۔ ایک فہرست (صف) میں پائی جانے والی تین اقدار کے وسط کو تلاش کرنے کے لیے سیڈو کوڈ یہ ہے:

وسط: =۔(کم+اعلی) / ۔
اگرآمد[وسط] <آمد[کم]
تبادلہ آری[کم]آمد کے ساتھ[وسط]
اگرآمد[اعلی] <آمد[کم]
تبادلہ آری[کم]آمد کے ساتھ[اعلی]
اگرآمد[وسط] <آمد[اعلی]
تبادلہ آری[وسط]آمد کے ساتھ[اعلی]
محور: =آمد[اعلی]

اری اصطلاح کا مطلب ہے صف۔ یہ کوڈ طبقہ میڈین کی تلاش کرتا ہے اور کچھ چھانٹ بھی کرتا ہے۔ یہ کوڈ طبقہ سادہ لگتا ہے ، لیکن یہ کافی مبہم ہوسکتا ہے۔ تو ، مندرجہ ذیل وضاحت پر توجہ دیں:

اس ٹیوٹوریل میں چھانٹ ایک فہرست تیار کرے گی جہاں پہلی قیمت سب سے چھوٹی قدر ہے ، اور آخری قیمت سب سے بڑی قدر ہے۔ حروف تہجی کے ساتھ ، A Z سے کم ہے۔

یہاں ، محور نتیجے میں میڈین ہے۔ کم فہرست یا ذیلی فہرست کا سب سے کم انڈیکس ہے (ضروری نہیں کہ سب سے کم قیمت کے لیے) اعلی فہرست یا ذیلی فہرست کا اعلی ترین انڈیکس ہے (ضروری نہیں کہ سب سے زیادہ قیمت کے لیے) ، اور درمیانی روایتی درمیانی انڈیکس ہے (ضروری نہیں کہ پوری فہرست کی درمیانی قیمت کے لیے)۔

لہذا ، حاصل کیا جانے والا میڈین سب سے کم انڈیکس کی قیمت ، درمیانی انڈیکس کی قیمت اور اعلی ترین انڈیکس کی قیمت کے درمیان ہے۔

کوڈ میں ، روایتی درمیانی انڈیکس پہلے حاصل کیا جاتا ہے۔ اس آغاز میں ، فہرست غیر ترتیب شدہ ہے۔ تین اقدار کے بڑھتے ہوئے ترتیب میں موازنہ اور کچھ دوبارہ ترتیب ایک ہی وقت میں ہونا ہے۔ پہلا اگر بیان سب سے کم انڈیکس اور درمیانی انڈیکس کی قیمت کا موازنہ کرتا ہے۔ اگر درمیانی انڈیکس سب سے کم انڈیکس سے کم ہے ، تو دو اقدار پوزیشنوں کو تبدیل کرتی ہیں۔ یہ چھانٹنا شروع کرتا ہے اور فہرست یا ذیلی فہرست میں اقدار کی ترتیب کو تبدیل کرتا ہے۔ دوسرا اگر بیان اعلی ترین انڈیکس اور سب سے کم انڈیکس کی قیمت کا موازنہ کرتا ہے۔ اگر اعلی ترین انڈیکس سب سے کم انڈیکس سے کم ہے تو ، دو اقدار پوزیشنوں کو تبدیل کرتی ہیں۔ یہ فہرست یا ذیلی فہرست میں اقدار کی ترتیب کو کچھ چھانٹنے اور تبدیل کرنے کا کام کرتا ہے۔ تیسرا اگر بیان درمیانی انڈیکس اور اعلی ترین انڈیکس کی قیمت کا موازنہ کرتا ہے۔ اگر اعلی ترین انڈیکس درمیانی انڈیکس سے کم ہے تو ، دو اقدار پوزیشنوں کو تبدیل کرتی ہیں۔ کچھ چھانٹ یا دوبارہ ترتیب یہاں بھی ہو سکتی ہے۔ یہ تیسری اگر حالت پچھلی دو کی طرح نہیں ہے۔

ان تینوں تبادلوں کے اختتام پر ، سوال میں تین اقدار کی درمیانی قیمت A [high] ہوگی ، جس کا اصل مواد کوڈ کے حصے میں تبدیل کیا گیا ہوگا۔ مثال کے طور پر ، غیر ترتیب شدہ ترتیب پر غور کریں:

سی بی اے

ہم پہلے ہی جانتے ہیں کہ میڈین بی ہے۔ تاہم ، یہ ثابت ہونا چاہیے۔ یہاں کا مقصد مندرجہ بالا کوڈ طبقہ کا استعمال کرتے ہوئے ان تین اقدار کا وسط حاصل کرنا ہے۔ پہلا اگر بیان بی اور سی کا موازنہ کرتا ہے اگر بی سی سے کم ہے تو بی اور سی کے عہدوں کو تبدیل کرنا ہوگا۔ B C سے کم ہے ، لہذا نیا انتظام بن جاتا ہے:

بی سی اے

نوٹس ، سب سے کم انڈیکس اور درمیانی انڈیکس کی اقدار بدل گئی ہیں۔ دوسرا اگر بیان A اور B کا موازنہ کرتا ہے اگر A B سے کم ہے تو A اور B کے عہدوں کو تبدیل کرنا ہوگا۔ A B سے کم ہے ، لہذا نیا انتظام بن جاتا ہے:

اے سی بی

نوٹس ، سب سے زیادہ انڈیکس اور سب سے کم انڈیکس کی اقدار بدل گئی ہیں۔ تیسرا اگر بیان C اور B کا موازنہ کرتا ہے اگر C B سے کم ہے تو C اور B کے عہدوں کو تبدیل کرنا ہوگا۔ C B سے کم نہیں ہے ، لہذا کوئی تبادلہ نہیں ہوتا ہے۔ نیا انتظام پہلے کی طرح باقی ہے ، یعنی:

اے سی بی

B درمیانی ہے ، جو A [اونچائی] ہے ، اور یہ محور ہے۔ لہذا ، محور فہرست یا ذیلی فہرست کے انتہائی اختتام پر پیدا ہوتا ہے۔

تبادلہ فنکشن۔

ایک اور خصوصیت جو فوری ترتیب سے درکار ہے وہ ہے تبادلہ فعل۔ تبادلہ فنکشن ، دو متغیر کی اقدار کا تبادلہ کرتا ہے۔ تبادلہ فنکشن کے لیے سیڈوکوڈ یہ ہے:

تبادلہ کی وضاحت کریں(ایکس،اور)
درجہ حرارت: =ایکس
ایکس: =اور
اور: =درجہ حرارت

یہاں ، x اور y اصل اقدار کا حوالہ دیتے ہیں نہ کہ کاپیاں۔

اس آرٹیکل میں چھانٹنا ایک فہرست تیار کرے گا جہاں پہلی قیمت سب سے چھوٹی قیمت ہے ، اور آخری قیمت سب سے بڑی قدر ہے۔

مضمون کا مواد۔

فوری ترتیب الگورتھم۔

غیر ترتیب شدہ فہرست کو ترتیب دینے کا عام طریقہ پہلی دو اقدار پر غور کرنا ہے۔ اگر وہ ترتیب میں نہیں ہیں تو انہیں ترتیب دیں۔ اگلا ، پہلی تین اقدار پر غور کریں۔ پہلے دو کو اسکین کرکے دیکھیں کہ تیسری قدر کہاں فٹ بیٹھتی ہے اور مناسب طریقے سے فٹ ہوجاتی ہے۔ پھر ، پہلی چار اقدار پر غور کریں۔ پہلی تین اقدار کو اسکین کریں تاکہ دیکھیں کہ چوتھی قدر کہاں فٹ بیٹھتی ہے اور مناسب طریقے سے فٹ ہوجاتی ہے۔ اس عمل کو اس وقت تک جاری رکھیں جب تک کہ پوری فہرست ترتیب نہ دی جائے۔

یہ طریقہ کار ، جسے کمپیوٹر پروگرامنگ کی زبان میں برٹ فورس سارٹ بھی کہا جاتا ہے ، بہت سست ہے۔ فوری ترتیب الگورتھم بہت تیز طریقہ کار کے ساتھ آتا ہے۔

کوئکسورٹ الگورتھم کے اقدامات مندرجہ ذیل ہیں۔

  1. اس بات کو یقینی بنائیں کہ غیر ترتیب شدہ فہرست میں کم از کم 2 نمبر ہیں۔
  2. فہرست کے لیے تخمینہ شدہ مرکزی قیمت حاصل کریں ، جسے محور کہا جاتا ہے۔ میڈین ، جیسا کہ اوپر بیان کیا گیا ہے ، محور حاصل کرنے کا ایک طریقہ ہے۔ مختلف طریقے ان کے فوائد اور نقصانات کے ساتھ آتے ہیں۔ - بعد میں دیکھنا.
  3. فہرست کو تقسیم کریں۔ اس کا مطلب ہے ، محور کو فہرست میں رکھیں۔ اس طرح ، بائیں طرف کے تمام عناصر محور کی قیمت سے کم ہیں ، اور دائیں طرف کے تمام عناصر محور کی قدر سے زیادہ یا اس کے برابر ہیں۔ تقسیم کے مختلف طریقے ہیں۔ تقسیم کا ہر طریقہ اپنے فوائد اور نقصانات کے ساتھ آتا ہے۔ تقسیم تقسیم اور فتح کی مثال میں تقسیم ہے۔
  4. نئے ذیلی فہرست کے جوڑوں کے لیے مرحلہ 1 ، 2 اور 3 کو بار بار دہرائیں جو کہ پوری فہرست کو ترتیب دینے تک سامنے آتے ہیں۔ یہ تقسیم اور فتح کی مثال میں فتح ہے۔

فوری ترتیب دینے والا سیڈوکوڈ یہ ہے:

الگورتھم کوئکسورٹ(آمد،کم،اعلی)ہے
اگرکم<پھر اعلی
محور(کم،اعلی)
p: =تقسیم(آمد،کم،اعلی)
کوئیکسورٹ(آمد،کم،p- )
کوئیکسورٹ(آمد،p+ ،اعلی)

ایک تقسیم سیڈوکوڈ۔

اس ٹیوٹوریل میں استعمال ہونے والا پارٹیشن سیڈوکوڈ یہ ہے:

الگورتھم تقسیم(آمد،کم،اعلی)ہے
محور: =آمد[اعلی]
میں: =کم
j: =اعلی
کیا
کیا
++۔میں
جبکہ(آمد[میں] <محور)
کیا
-j
جبکہ(آمد[j] >محور)
اگر (میں<j)
تبادلہ آری[میں]آمد کے ساتھ[j]
جبکہ(میں<j)
تبادلہ آری[میں]آمد کے ساتھ[اعلی]
واپسیمیں

ذیل میں فوری ترتیب کی مثال میں ، یہ کوڈ استعمال کیا گیا ہے:

فوری ترتیب کی مثال۔

حروف تہجی کے حروف کی درج ذیل غیر ترتیب شدہ فہرست (صف) پر غور کریں:

Q W E R T Y U I O P

معائنہ کے ذریعہ ، ترتیب شدہ فہرست یہ ہے:

E I O P Q R T U W Y

غیر ترتیب شدہ فہرست سے ، اوپر والے الگورتھم اور سیڈوکوڈ حصوں کا استعمال کرتے ہوئے ترتیب شدہ فہرست اب ثابت ہوگی:

Q W E R T Y U I O P

پہلا محور arr [0] = Q ، arr [4] = T ، اور arr [9] = P سے طے کیا جاتا ہے ، اور اسے Q کے طور پر شناخت کیا جاتا ہے اور فہرست کے انتہائی دائیں طرف رکھا جاتا ہے۔ لہذا ، کسی بھی پیوٹ فنکشن چھانٹنے والی فہرست بن جاتی ہے:

P W E R T Y U I O Q

موجودہ محور ق ہے۔ محور کے طریقہ کار نے کچھ چھوٹی چھانٹی کی اور P کو پہلی پوزیشن پر رکھا۔ نتیجے میں آنے والی فہرست کو دوبارہ ترتیب دیا جانا چاہیے کمپیوٹر معائنہ کے ذریعے تقسیم نہیں کرسکتا۔ تو ، یہ انڈیکس اور مذکورہ تقسیم الگورتھم کا استعمال کرکے کرتا ہے۔

کم اور اونچے انڈیکس اب 0 اور 9 ہیں۔ لہذا ، کمپیوٹر انڈیکس 0 سے اسکین کرکے شروع کرے گا جب تک کہ وہ انڈیکس تک نہ پہنچ جائے ، جس کی قیمت محور کے برابر یا زیادہ ہو اور عارضی طور پر وہاں رک جائے۔ یہ اوپر (دائیں) اختتام ، انڈیکس 9 ، نیچے آتے ہوئے بھی اسکین کرے گا ، یہاں تک کہ یہ ایک انڈیکس تک پہنچ جائے جس کی قیمت محور سے کم یا اس کے برابر ہو اور عارضی طور پر وہاں رک جائے۔ اس کا مطلب ہے سٹاپ کی دو پوزیشنیں۔ اگر میں ، بڑھتی ہوئی انڈیکس متغیر ، کم سے کم ابھی تک کم ہونے والے انڈیکس متغیر کے برابر یا اس سے زیادہ نہیں ہے ، جے ہائی سے ، پھر یہ دونوں اقدار تبدیل ہو جاتی ہیں۔ موجودہ صورتحال میں ، دونوں سروں سے سکیننگ ڈبلیو اور او پر رک گئی ہے لہذا فہرست بن جاتی ہے:

P O E R T Y U I W Q

محور اب بھی ہے۔ مخالف سمتوں میں سکیننگ جاری ہے اور اسی کے مطابق رکتی ہے۔ اگر میں ابھی تک j کے برابر یا اس سے بڑا نہیں ہوں ، تو وہ دو اقدار جن پر دونوں سروں سے سکیننگ رک گئی ہے ، تبدیل کر دی جاتی ہیں۔ اس بار ، دونوں سروں سے سکیننگ R اور I پر رک گئی۔ لہذا ، فہرست کا انتظام بن جاتا ہے:

P O E I T Y U R W Q

محور اب بھی ہے۔ مخالف سمتوں میں سکیننگ جاری ہے اور اسی کے مطابق رکتی ہے۔ اگر میں ابھی تک j کے برابر یا اس سے زیادہ نہیں ہوں ، تو دو اقدار جن پر سکیننگ رک گئی ہے ، کو تبدیل کیا جاتا ہے۔ اس بار ، دونوں سروں سے سکیننگ T کے لیے i اور میں j کے لیے رک گئی۔ میں اور جے ملے ہیں یا پار ہوئے ہیں۔ لہذا ، کوئی تبادلہ نہیں ہوسکتا ہے۔ فہرست وہی رہتی ہے جیسے:

P O E I T Y U R W Q

اس مقام پر ، محور ، Q ، کو چھانٹنے میں اپنی آخری پوزیشن میں رکھنا ضروری ہے۔ یہ arr [i] کو arr [high] کے ساتھ ، T اور Q کو تبدیل کرکے کیا جاتا ہے۔ فہرست بن جاتی ہے:

P O E I Q Y U R W T

اس مقام پر ، پوری فہرست کی تقسیم ختم ہو گئی ہے۔ محور = Q نے اپنا کردار ادا کیا ہے۔ اب تین ذیلی فہرستیں ہیں ، جو یہ ہیں:

P O E I Q Y U R W T

تقسیم نمونہ میں تقسیم اور فتح (چھانٹنا) ہے۔ Q اپنی صحیح چھانٹنے کی پوزیشن پر ہے۔ Q کے بائیں ہر عنصر Q سے چھوٹا ہے ، اور Q کا دائیں ہر عنصر Q سے بڑا ہے۔ تاہم ، بائیں فہرست کو ابھی تک ترتیب نہیں دیا گیا ہے۔ اور صحیح فہرست ابھی تک ترتیب نہیں دی گئی ہے۔ بائیں ذیلی فہرست اور دائیں ذیلی فہرست کو ترتیب دینے کے لیے پورے کوئیک سارٹ فنکشن کو بار بار بلایا جانا چاہیے۔ کوئیک چھانٹ کی یہ یاد دہانی جاری رکھنی ہے۔ نئی ذیلی فہرستیں اس وقت تک تیار ہوں گی جب تک پوری اصل فہرست مکمل طور پر چھانٹ نہ جائے۔ کوئیک سارٹ فنکشن کو یاد کرنے کے لیے ، بائیں ذیلی فہرست میں سب سے پہلے اس سے متعلقہ دائیں ذیلی فہرست میں شرکت کی جاتی ہے۔ ہر ذیلی فہرست کے لیے ایک نیا محور حاصل کرنا ہوگا۔

ذیلی فہرست کے لیے:

پی او ای آئی۔

P ، O ، اور I کے لیے محور (میڈین) پرعزم ہے۔ اس ذیلی فہرست کے لیے محور O ہوگا ، اور مکمل فہرست سے متعلق ، نئی آمد [low] ہے arr [0] ، اور نئی آمد [high] آخری arr [i-1] = arr [ 4-1] = arr [3] ، جہاں i پچھلی تقسیم کا آخری محور انڈیکس ہے۔ پیوٹ () فنکشن کہلانے کے بعد ، نئی پیوٹ ویلیو ، پیوٹ = O. پیوٹ فنکشن اور پیوٹ ویلیو کے درمیان الجھن میں نہ پڑیں۔ پیوٹ فنکشن کچھ چھوٹی چھانٹی کر سکتا ہے اور پیوٹ کو ذیلی فہرست کے انتہائی دائیں طرف رکھ سکتا ہے۔ یہ ذیلی فہرست بن جاتی ہے ،

آئی پی ای او

اس اسکیم کے ساتھ ، محور ہمیشہ ذیلی فہرست یا فہرست کے دائیں سرے پر اپنے فنکشن کال کے بعد ختم ہوتا ہے۔ دونوں سروں سے اسکیننگ arr [0] اور arr [3] سے شروع ہوتی ہے یہاں تک کہ i اور j ملیں یا عبور کریں۔ موازنہ pivot = O کے ساتھ کیا جاتا ہے۔ پہلے اسٹاپ P اور E پر ہوتے ہیں۔ ان کو تبدیل کیا جاتا ہے ، اور نئی ذیلی فہرست بن جاتی ہے:

آئی ای پی او۔

دونوں سروں سے سکیننگ جاری ہے ، اور نئے اسٹاپس پی کے لیے آئی اور ای کے لیے جے پر ہیں۔ اب میں اور جے ملے ہیں یا کراس ہو چکے ہیں۔ تو ذیلی فہرست اسی طرح رہتی ہے:

آئی ای پی او۔

ذیلی فہرست یا فہرست کی تقسیم اس وقت ختم ہوتی ہے جب محور کو اس کی آخری پوزیشن میں رکھا جاتا ہے۔ لہذا ، arr [i] اور arr [high] کے لیے نئی اقدار کو تبدیل کیا جاتا ہے۔ یعنی P اور O کو تبدیل کیا جاتا ہے۔ نئی ذیلی فہرست بن جاتی ہے:

آئی ای او پی

O اب پوری فہرست کے لیے اپنی آخری پوزیشن پر ہے۔ محور کی حیثیت سے اس کا کردار ختم ہو گیا ہے۔ ذیلی فہرست کو فی الحال تین مزید فہرستوں میں تقسیم کیا گیا ہے ، جو یہ ہیں:

آئی ای او پی

اس مقام پر ، پہلی دائیں ذیلی فہرست کے فوری ترتیب کو بلایا جانا ہے۔ تاہم ، یہ نہیں کہا جائے گا. اس کے بجائے ، یہ نوٹ کیا جائے گا اور محفوظ کیا جائے گا ، بعد میں بلایا جائے گا۔ جیسا کہ پارٹیشننگ فنکشن کے بیانات پر عمل درآمد کیا جا رہا تھا ، فنکشن کے اوپر سے ، یہ بائیں ذیلی فہرست کے لیے فوری ترتیب ہے جسے ابھی بلایا جانا چاہیے (پیوٹ () کے بعد بلایا گیا ہے)۔ اسے فہرست کے لیے بلایا جائے گا:

میں ای

یہ I اور E کے میڈین کی تلاش سے شروع ہوگا۔ یہاں ، arr [low] = I ، arr [mid] = I اور arr [high] = E. ، I. تاہم ، مذکورہ بالا محور سیڈوکوڈ پیوٹ کو E کے طور پر تعین کرے گا۔ ذیل میں عمل درآمد میں ، کوڈ میں کچھ ایڈجسٹمنٹ ہے۔ ذیلی فہرست بن جاتی ہے ،

ای آئی۔

محور ہمیشہ ذیلی فہرست یا فہرست کے دائیں سرے پر اپنے فنکشن کال کے بعد ختم ہوتا ہے۔ دونوں سروں سے اسکیننگ arr [0] سے شروع ہوتی ہے اور arr [1] خصوصی جب تک i اور j ملتے یا پار نہیں ہوتے۔ موازنہ پیوٹ = I کے ساتھ کیا جاتا ہے۔ پہلا اور واحد اسٹاپ I اور E پر ہوتا ہے: I میں i کے لیے اور E کے لیے J کے لیے۔ اب میں اور جے مل چکے ہیں یا عبور کر چکے ہیں۔ لہذا ، ذیلی فہرست اسی طرح رہتی ہے:

ای آئی۔

ذیلی فہرست یا فہرست کی تقسیم اس وقت ختم ہوتی ہے جب محور کو اس کی آخری پوزیشن میں رکھا جاتا ہے۔ لہذا ، arr [i] اور arr [high] کے لیے نئی اقدار کو تبدیل کیا جاتا ہے۔ یہ یہاں ہوتا ہے کہ arr [i] = I اور arr [high] = I. نئی ذیلی فہرست بن جاتی ہے:

ای آئی۔

میں اب پوری فہرست کے لیے اپنی آخری پوزیشن پر ہوں۔ محور کی حیثیت سے اس کا کردار ختم ہو گیا ہے۔ ذیلی فہرست کو اب مزید دو فہرستوں میں تقسیم کیا گیا ہے ،

ای آئی۔

اب ، پیوٹس اب تک Q ، O ، اور I رہے ہیں۔ پیوٹس اپنی آخری پوزیشن پر ختم ہوتے ہیں۔ کسی ایک عنصر کی ذیلی فہرست ، جیسا کہ اوپر والا P ، بھی اپنی آخری پوزیشن پر ختم ہوتا ہے۔

اس مقام پر ، پہلی بائیں ذیلی فہرست مکمل طور پر ترتیب دی گئی ہے۔ اور چھانٹنے کا طریقہ کار اب ہے:

E I O P Q Y U R W T

پہلی دائیں ذیلی فہرست:

وائی ​​یو آر ڈبلیو ٹی

اب بھی ترتیب دینے کی ضرورت ہے.

پہلی دائیں ذیلی فہرست کو فتح کرنا۔
یاد رکھیں کہ پہلی دائیں ذیلی فہرست کے لیے فوری ترتیب دینے کی کال نوٹ کی گئی تھی اور اس پر عمل درآمد کے بجائے محفوظ کیا گیا تھا۔ اس مقام پر ، اس پر عمل درآمد کیا جائے گا۔ اور اسی طرح ، نیا arr [low] = arr [5] = arr [QPivotIndex+1] ، اور نیا arr [high] رہتا ہے arr [9]۔ اسی طرح کی سرگرمیوں کا مجموعہ جو کہ پہلی بائیں ذیلی فہرست کے لیے ہوا یہاں ہوگا۔ اور یہ پہلی دائیں ذیلی فہرست اس طرح ترتیب دی گئی ہے:

آر ٹی یو ڈبلیو وائی

اور اصل غیر ترتیب شدہ فہرست کو ترتیب دیا گیا ہے:

E I O P Q R T U W Y

جاوا کوڈنگ۔

جاوا میں الگورتھم ڈالنا صرف مذکورہ بالا تمام سیڈو کوڈ حصوں کو ایک کلاس میں جاوا طریقوں میں ڈالنا ہے۔ مت بھولنا کہ کلاس میں ایک اہم () طریقہ ہونا ضروری ہے جو کہ غیر ترتیب شدہ صف کے ساتھ quicksort () فنکشن کو کال کرے گا۔

محور () طریقہ۔

جاوا پیوٹ () طریقہ جو قیمت واپس کرتا ہے ، محور ہونا چاہیے:

باطلمحور(چارآمد[]، intکم، intاعلی) {
intوسط= (کم+اعلی) / ؛
اگر (آمد[وسط] <آمد[کم])
تبادلہ(آمد،کم،وسط)؛
اگر (آمد[اعلی] <آمد[کم])
تبادلہ(آمد،کم،اعلی)؛
اگر ((اعلی-کم) > ) {
اگر (آمد[وسط] <آمد[اعلی])
تبادلہ(آمد،وسط،اعلی)؛
}
}

تبادلہ کا طریقہ۔

swap () طریقہ یہ ہونا چاہیے:

باطلتبادلہ(چارآمد[]، intایکس، intاور) {
چاردرجہ حرارت=آمد[ایکس]؛
آمد[ایکس] =آمد[اور]؛
آمد[اور] =درجہ حرارت؛
}

کوئکسورٹ () طریقہ۔

quicksort () طریقہ ہونا چاہیے:

باطلکوئیکسورٹ(چارآمد[]، intکم، intاعلی) {
اگر (کم<اعلی) {
محور(آمد،کم،اعلی)؛
intp=تقسیم(آمد،کم،اعلی)؛
کوئیکسورٹ(آمد،کم،p- )؛
کوئیکسورٹ(آمد،p+ ،اعلی)؛
}
}

تقسیم کا طریقہ ()

تقسیم () کا طریقہ یہ ہونا چاہیے:

intتقسیم(چارآمد[]، intکم، intاعلی) {
چارمحور=آمد[اعلی]؛
intمیں=کم؛
intj=اعلی؛
کیا {
کیا
++۔میں؛
جبکہ(آمد[میں] <محور)؛
کیا
-j؛
جبکہ(آمد[j] >محور)؛
اگر (میں<j)
تبادلہ(آمد،میں،j)؛
}جبکہ(میں<j)؛
تبادلہ(آمد،میں،اعلی)؛
واپسیمیں؛
}

اہم () طریقہ۔

اہم () طریقہ یہ ہو سکتا ہے:

عوامجامد باطلمرکزی(سٹرنگ[]دلائل) {
چارآمد[] = {'ق'، 'میں'، 'اور'، 'ر'، 'ٹی'، 'اور'، 'یو'، 'میں'، 'یا'، 'پی'}؛
TheClass QuickSort۔= نئیکلاس()؛
QuickSort.کوئیکسورٹ(آمد، ، )؛
نظامباہر.پرنٹ ایل این('ترتیب شدہ عناصر:')؛
کے لیے(intمیں=؛میں<10۔؛میں++۔) {
نظامباہر.پرنٹ کریں(آمد[میں])؛نظامباہر.پرنٹ کریں('')؛
}
نظامباہر.پرنٹ ایل این()؛
}

مذکورہ بالا تمام طریقوں کو ایک کلاس میں رکھا جا سکتا ہے۔

نتیجہ

کوئیک چھانٹ ایک چھانٹنے والا الگورتھم ہے جو تقسیم اور فتح کا نمونہ استعمال کرتا ہے۔ یہ ایک غیر ترتیب شدہ فہرست کو دو یا تین ذیلی فہرستوں میں تقسیم کرکے شروع ہوتا ہے۔ اس سبق میں ، فوری ترتیب نے ایک فہرست کو تین ذیلی فہرستوں میں تقسیم کیا ہے: ایک بائیں ذیلی فہرست ، ایک عنصر کی درمیانی فہرست ، اور دائیں ذیلی فہرست۔ کوئیک سارٹ میں فتح ایک پیوٹ ویلیو کا استعمال کرتے ہوئے ایک فہرست یا ذیلی فہرست کو چھانٹتے ہوئے تقسیم کر رہی ہے۔ اس ٹیوٹوریل نے جاوا کمپیوٹر زبان میں کوئیک چھانٹ کے ایک نفاذ کی وضاحت کی ہے۔

مصنف کے بارے میں

کریسنتھس فورچا۔

پہلے اصولوں اور متعلقہ سیریز سے ریاضی کے انضمام کا دریافت کرنے والا۔ ٹیکنیکل ایجوکیشن میں ماسٹر ڈگری ، الیکٹرانکس اور کمپیوٹر سافٹ ویئر میں مہارت۔ بی ایس سی الیکٹرانکس۔ میرے پاس کمپیوٹر اور ٹیلی کمیونیکیشن میں ماسٹر کی سطح پر علم اور تجربہ بھی ہے۔ 20،000 مصنفین میں سے ، میں devarticles.com پر 37 واں بہترین مصنف تھا۔ میں ان شعبوں میں 10 سال سے زائد عرصے سے کام کر رہا ہوں۔

تمام پوسٹس دیکھیں۔

متعلقہ لینکس اشارہ پوسٹس۔