ہیپسورٹ ٹائم پیچیدگی

Ypswr Aym Pychydgy



Heap Sort، جسے Heapsort لکھا جاتا ہے، ایک قسم کا الگورتھم ہے۔ یہ ایک فہرست لیتا ہے جو جزوی طور پر ترتیب دیا جاتا ہے اور اس سے ترتیب شدہ فہرست تیار کرتا ہے۔ ترتیب صعودی یا نزولی ہو سکتی ہے۔ اس مضمون میں، چھانٹنا صعودی ہے۔ نوٹ کریں کہ ہیپسورٹ نامکمل طور پر غیر ترتیب شدہ فہرست کو ترتیب نہیں دیتا ہے۔ یہ جزوی طور پر ترتیب دی گئی (چھانٹی ہوئی) فہرست کو ترتیب دیتا ہے۔ وہ جزوی طور پر ترتیب دی گئی فہرست ایک ڈھیر ہے۔ اس مضمون میں، غور کیا گیا ہیپ کم از کم (صعودی) ہیپ ہے۔

ایک ہیپ کو 'جزوی طور پر ترتیب دیا گیا' کہا جاتا ہے نہ کہ 'جزوی طور پر ترتیب دیا گیا'۔ لفظ 'ترتیب' کا مطلب ہے مکمل ترتیب (مکمل ترتیب)۔ ایک ڈھیر کو جزوی طور پر من مانی طور پر حکم نہیں دیا جاتا ہے۔ ایک ہیپ کو جزوی طور پر ایک معیار (پیٹرن) کے بعد ترتیب دیا گیا ہے، جیسا کہ ذیل میں دکھایا گیا ہے۔

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







اس مضمون کا مقصد مختصر طور پر ہیپسورٹ کی وضاحت کرنا اور پھر اس کی وقت کی پیچیدگی پیدا کرنا ہے (ذیل میں وقت کی پیچیدگی کے معنی دیکھیں)۔ آخر میں، کوڈنگ C++ میں کی جاتی ہے۔



کم از کم ڈھیر

ڈھیر کم از کم یا زیادہ سے زیادہ ڈھیر ہو سکتا ہے۔ ایک max-heap وہ ہے جہاں پہلا عنصر سب سے زیادہ عنصر ہے، اور پورے درخت یا متعلقہ فہرست کو جزوی طور پر نزولی ترتیب میں ترتیب دیا گیا ہے۔ ایک منٹ ہیپ وہ ہے جہاں پہلا عنصر کم سے کم عنصر ہے، اور پوری فہرست کو جزوی طور پر صعودی ترتیب میں ترتیب دیا گیا ہے۔ اس مضمون میں، صرف کم از کم ڈھیر پر غور کیا گیا ہے۔ نوٹ: ہیپ کے موضوع میں، ایک عنصر کو نوڈ بھی کہا جاتا ہے۔



ایک ڈھیر ایک مکمل بائنری درخت ہے۔ بائنری درخت کو ایک صف (فہرست) کے طور پر ظاہر کیا جا سکتا ہے؛ اوپر سے نیچے اور بائیں سے دائیں پڑھیں۔ کم ہیپ کے لیے ہیپ کی خاصیت یہ ہے کہ پیرنٹ نوڈ اس کے دو بچوں میں سے ہر ایک سے کم یا اس کے برابر ہے۔ غیر ترتیب شدہ فہرست کی ایک مثال یہ ہے:





9 19 24 5 3 گیارہ 14 22 7 6 17 پندرہ خالی خالی خالی
0 1 دو 3 4 5 6 7 8 9 10 گیارہ 12 13 14

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

نوڈس اور اشاریہ جات کے درمیان تعلق

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



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

دو * میں + 1

اور صحیح بچہ انڈیکس پر ہے:

دو * میں + دو

یہ صفر پر مبنی اشاریہ سازی کے لیے ہے۔ اور اس طرح، انڈیکس 0 پر والدین کا بائیں بچہ انڈیکس 2×0+1=1 پر ہوتا ہے اور اس کا دایاں بچہ 2×0+2=2 پر ہوتا ہے۔ انڈیکس 1 پر والدین کا بائیں بچہ انڈیکس 2×1+1=3 پر اور دایاں بچہ انڈیکس 2×1+2=4 پر ہوتا ہے۔ اور اسی طرح.

کم سے کم ہیپ پراپرٹی کے لحاظ سے، i میں والدین 2i+1 پر بائیں بچے سے کم یا اس کے برابر اور 2i+2 پر دائیں بچے سے کم یا اس کے برابر ہیں۔

ڈھیر

Heapifying کا مطلب ہے ڈھیر بنانا۔ اس کا مطلب فہرست کے عناصر (یا متعلقہ درخت) کو دوبارہ ترتیب دینا ہے تاکہ وہ ہیپ پراپرٹی کو پورا کر سکیں۔ ڈھیر لگانے کے عمل کے اختتام پر، فہرست یا درخت ایک ڈھیر ہے۔

اگر پچھلی غیر ترتیب شدہ فہرست کا ڈھیر لگا دیا جاتا ہے، تو یہ ہو جائے گا:

3 5 گیارہ 7 6 پندرہ 14 22 9 19 17 24 خالی خالی خالی
0 1 دو 3 4 5 6 7 8 9 10 گیارہ 12 13 14

نوٹ: فہرست میں 12 عناصر ہیں نہ کہ 15۔ دوسری قطار میں اشاریہ جات ہیں۔ ڈھیر بنانے کے عمل میں، عناصر کی جانچ پڑتال کی جانی تھی، اور کچھ کو تبدیل کرنا تھا۔

دھیان دیں کہ سب سے چھوٹا اور پہلا عنصر 3 ہے۔ باقی عناصر ایک چڑھتے ہوئے لیکن غیر متزلزل انداز میں چلتے ہیں۔ اگر 2i+1 اور 2i+2 پوزیشن پر بائیں اور دائیں بچے ہر ایک i پر والدین سے زیادہ یا برابر ہیں، تو یہ ایک کم از کم ہیپ ہے۔ یہ مکمل ترتیب یا ترتیب نہیں ہے۔ ہیپ پراپرٹی کے مطابق یہ جزوی ترتیب ہے۔ یہیں سے ہیپ چھانٹنے کا اگلا مرحلہ شروع ہوتا ہے۔

Heapify وقت کی پیچیدگی

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

اے ( n )

جہاں n N ہے اور مین آپریشنز کی زیادہ سے زیادہ ممکنہ تعداد ہے۔ اس اشارے کو Big-O نوٹیشن کہا جاتا ہے۔ یہ بڑے حروف میں O سے شروع ہوتا ہے، اس کے بعد قوسین ہوتا ہے۔ قوسین کے اندر ممکنہ سب سے زیادہ تعداد میں کارروائیوں کا اظہار ہے۔

یاد رکھیں: اضافہ ضرب بن سکتا ہے اگر ایک ہی چیز کو جوڑا جا رہا ہے دہرایا جائے۔

ہیپسورٹ کی مثال

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

9 19 24 5 3 گیارہ 14 22 7 6 17 پندرہ

فہرست سے تیار کردہ کم سے کم ہیپ یہ ہے:

3 5 گیارہ 7 6 پندرہ 14 22 9 19 17 24

ہیپسورٹ میں پہلا مرحلہ اس ہیپ کو تیار کرنا ہے جو تیار کیا گیا ہے۔ یہ جزوی طور پر ترتیب دی گئی فہرست ہے۔ یہ ایک ترتیب شدہ (مکمل طور پر ترتیب شدہ) فہرست نہیں ہے۔

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

آخر میں، نئی صف میں تمام عناصر کو صعودی ترتیب میں (مکمل طور پر) ترتیب دیا جائے گا۔ اور اب صرف جزوی طور پر آرڈر نہیں کیا گیا ہے۔

دوسرے مرحلے میں، سب سے پہلے 3 کو ہٹانا اور اسے نئی صف میں رکھنا ہے۔ نتائج یہ ہیں:

3

اور

5 گیارہ 7 6 پندرہ 14 22 9 19 17 24

پہلے عنصر کو نکالنے سے پہلے باقی عناصر کو ڈھیر لگانا پڑتا ہے۔ باقی عناصر کا ڈھیر بن سکتا ہے:

5 6 7 9 پندرہ 14 22 گیارہ 19 17 24

5 کو نکالنا اور نئی فہرست (سرنی) میں شامل کرنا نتائج دیتا ہے:

3 5

اور

6 7 9 پندرہ 14 22 گیارہ 19 17 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملے گا:

6 7 9 پندرہ 14 22 گیارہ 19 17 24

6 کو نکالنا اور نئی فہرست (سرنی) میں شامل کرنا نتائج دیتا ہے:

3 5 6

اور

7 9 پندرہ 14 22 گیارہ 19 17 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملے گا:

7 9 گیارہ 14 22 پندرہ 19 17 24

7 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7

اور

9 گیارہ 14 22 پندرہ 19 17 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملتا ہے:

9 گیارہ 14 22 پندرہ 19 17 24

9 کو نکالنا اور نئی فہرست میں شامل کرنا، نتائج دیتا ہے:

3 5 6 7 9

اور

گیارہ 14 22 پندرہ 19 17 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملتا ہے:

گیارہ 14 17 پندرہ 19 22 24

11 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7 9 گیارہ

اور

14 17 پندرہ 19 22 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملے گا:

14 17 پندرہ 19 22 24

14 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7 9 گیارہ 14

اور

17 پندرہ 19 22 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملے گا:

پندرہ 17 19 22 24

15 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7 9 گیارہ 14 پندرہ

اور

17 19 22 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملے گا:

17 19 22 24

17 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7 9 گیارہ 14 پندرہ 17

اور

19 22 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملے گا:

19 22 24

19 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7 9 گیارہ 14 پندرہ 17 19

اور

22 24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملتا ہے:

22 24

22 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7 9 گیارہ 14 پندرہ 17 19 22

اور

24

بقیہ سیٹ کو ہیپ کرنے سے یہ ملتا ہے:

24

24 کو نکالنا اور اسے نئی فہرست میں شامل کرنا نتائج دیتا ہے:

3 5 6 7 9 گیارہ 14 پندرہ 17 19 22 24

اور

- - -

ہیپ سرنی اب خالی ہے۔ اس کے شروع میں جتنے بھی عناصر تھے وہ اب نئی صف (فہرست) میں ہیں اور ترتیب دیے گئے ہیں۔

ہیپسورٹ الگورتھم

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

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

ہیپسورٹ ٹائم پیچیدگی مناسب

ہیپسورٹ کے لیے وقت کی پیچیدگی کا تعین کرنے کے لیے ایک مرحلے کا طریقہ استعمال کیا جاتا ہے۔ فرض کریں کہ 8 غیر ترتیب شدہ عناصر کو ترتیب دیا جانا ہے۔

ہیپیفائی کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز 8 عناصر ہے 8 .
دی بقیہ کو ڈھیر کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز 7 عناصر ہے 7 .
دی بقیہ کو ڈھیر کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز 6 عناصر ہے 6 .
دی بقیہ کو ڈھیر کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز 5 عناصر ہے 5 .
دی بقیہ کو ڈھیر کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز 4 عناصر ہے 4 .
دی بقیہ کو ڈھیر کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز 3 عناصر ہے 3 .
دی بقیہ کو ڈھیر کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز دو عناصر ہے دو .
دی بقیہ کو ڈھیر کرنے کے لیے ممکنہ زیادہ سے زیادہ آپریشنز 1 عنصر ہے 1 .

آپریشنز کی ممکنہ زیادہ سے زیادہ تعداد یہ ہے:

8 + 7 + 6 + 5 + 4 + 3 + دو + 1 = 36

ان کارروائیوں کی اوسط یہ ہے:

36 / 8 = 4.5

نوٹ کریں کہ پچھلی مثال میں آخری چار ڈھیر تبدیل نہیں ہوئے، جب پہلا عنصر ہٹا دیا گیا تھا۔ جب پہلا عنصر ہٹا دیا گیا تھا تو پچھلے ڈھیروں میں سے کچھ بھی تبدیل نہیں ہوئے تھے۔ اس کے ساتھ، مین آپریشنز کی بہتر اوسط تعداد 3 ہے نہ کہ 4.5۔ لہذا، مین آپریشنز کی ایک بہتر کل اوسط تعداد یہ ہے:

24 = 8 ایکس 3
=> 24 = 8 ایکس لاگ < ذیلی > دو < / ذیلی > 8

لاگ کے بعد سے دو 8 = 3۔

عام طور پر، heapsort کے لیے اوسط کیس وقت کی پیچیدگی ہے:

اے ( n. log2n )

جہاں ڈاٹ کا مطلب ہے ضرب اور n کا مطلب ہے N، فہرست میں عناصر کی کل تعداد (یا تو فہرست)۔

نوٹ کریں کہ پہلے عنصر کو نکالنے کے عمل کو نظر انداز کر دیا گیا ہے۔ وقت کی پیچیدگی کے موضوع پر، نسبتاً کم وقت لینے والے آپریشنز کو نظر انداز کر دیا جاتا ہے۔

C++ میں کوڈنگ

C++ کی الگورتھم لائبریری میں، ایک make_heap() فنکشن موجود ہے۔ نحو ہے:

سانچے < کلاس RandomAccessIterator، کلاس موازنہ کریں۔ >
constexpr باطل ڈھیر بنائیں ( RandomAccessIterator پہلے، RandomAccessIterator آخری، کمپیئر کمپیئر ) ;

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

ویکٹر < int > vtr = { 9 , 19 , 24 , 5 , 3 , گیارہ , 14 , 22 , 7 , 6 , 17 , پندرہ } ;
ویکٹر < int > :: تکرار کرنے والا iterB = vtr شروع ( ) ;
ویکٹر < int > :: تکرار کرنے والا iterE = vtr اختتام ( ) ;
ڈھیر بنائیں ( iterB، iterE، زیادہ < int > ( ) ) ;

یہ کوڈ ویکٹر کے مواد کو کم از کم ہیپ کنفیگریشن میں تبدیل کرتا ہے۔ درج ذیل C++ ویکٹرز میں، دو صفوں کے بجائے دو ویکٹر استعمال کیے جائیں گے۔

ویکٹر کے پہلے عنصر کو کاپی کرنے اور واپس کرنے کے لیے، ویکٹر نحو کا استعمال کریں:

constexpr حوالہ سامنے ( ) ;

ویکٹر کے پہلے عنصر کو ہٹانے اور اسے پھینکنے کے لیے، ویکٹر نحو کا استعمال کریں:

constexpr تکرار کرنے والا مٹانا ( const_iterator پوزیشن )

ویکٹر (اگلا عنصر) کے پیچھے ایک عنصر شامل کرنے کے لیے، ویکٹر نحو کا استعمال کریں:

constexpr باطل پیچھے دھکیلو ( const ٹی اور ایکس ) ;

پروگرام کا آغاز یہ ہے:

# شامل کریں
#include
#شامل <ویکٹر>
استعمال کرتے ہوئے نام کی جگہ std ;

الگورتھم اور ویکٹر لائبریریاں شامل ہیں۔ پروگرام میں اگلا ہیپسورٹ() فنکشن ہے، جو یہ ہے:

باطل heapsort ( ویکٹر < int > اور oldV، ویکٹر < int > اور نیا وی ) {
اگر ( oldV سائز ( ) > 0 ) {
ویکٹر < int > :: تکرار کرنے والا iterB = oldV شروع ( ) ;
ویکٹر < int > :: تکرار کرنے والا iterE = oldV اختتام ( ) ;
ڈھیر بنائیں ( iterB، iterE، زیادہ < int > ( ) ) ;

int اگلے = oldV سامنے ( ) ;
oldV مٹانا ( iterB ) ;
نیا وی پیچھے دھکیلو ( اگلے ) ;
heapsort ( پرانا وی، نیا وی ) ;
}
}

یہ ایک تکراری فعل ہے۔ یہ C++ الگورتھم لائبریری کا make_heap() فنکشن استعمال کرتا ہے۔ فنکشن ڈیفینیشن میں دوسرا کوڈ سیگمنٹ ہیپ بلڈنگ کے بعد پرانے ویکٹر سے پہلا عنصر نکالتا ہے اور نئے ویکٹر کے لیے اگلے عنصر کے طور پر شامل کرتا ہے۔ نوٹ کریں کہ فنکشن کی تعریف میں، ویکٹر پیرامیٹرز حوالہ جات ہیں، جبکہ فنکشن کو شناخت کنندگان (نام) کے ساتھ کہا جاتا ہے۔

اس کے لیے ایک مناسب C++ مین فنکشن یہ ہے:

int مرکزی ( int argc چار ** argv )
{
ویکٹر < int > oldV = { 9 , 19 , 24 , 5 , 3 , گیارہ , 14 , 22 , 7 , 6 , 17 , پندرہ } ;
ویکٹر < int > نیا وی ;
heapsort ( پرانا وی، نیا وی ) ;

کے لیے ( int میں = 0 ; میں < نیا وی سائز ( ) ; میں ++ ) {
cout << نیا وی [ میں ] << '' ;
}
cout << endl ;

واپسی 0 ;
}

آؤٹ پٹ ہے:

3 5 6 7 9 گیارہ 14 پندرہ 17 19 22 24

ترتیب دیا گیا (مکمل طور پر)۔

نتیجہ

مضمون میں ہیپ سورٹ کی نوعیت اور کام کے بارے میں تفصیل سے بحث کی گئی ہے جسے عام طور پر ہیپسورٹ کے نام سے جانا جاتا ہے، چھانٹنے والے الگورتھم کے طور پر۔ Heapify Time Complexity، Heapsort illustration، اور Heapsort بطور الگورتھم کا احاطہ کیا گیا اور مثالوں کے ذریعے اس کی تائید کی گئی۔ اچھی طرح سے لکھے گئے ہیپسورٹ پروگرام کے لیے اوسط وقت کی پیچیدگی O(nlog(n)) ہے