මෙම ප්රශ්නය සම්බන්ධයෙන් කරුණු කිහිපයක් ඉදිරිපත් කළ හැකිය.
ක්වික්සෝර්ට් සාමාන්යයෙන් වේගවත් වේ
ක්වික්සෝර්ට්හි නරකම තත්වයේ හැසිරීමක් තිබුණද , එය සාමාන්යයෙන් වේගවත් ය: අහඹු හැරීම් තේරීම උපකල්පනය කරමින්, ආදානය සමාන ප්රමාණයේ උප කුලක දෙකකට වෙන් කරන යම් සංඛ්යාවක් තෝරා ගැනීමට අපට විශාල අවස්ථාවක් තිබේ, එය අපට අවශ්ය වන්නේ හරියටම ය .O(n2)
විශේෂයෙන්, අපි සෑම බෙදීම් 10 කටම 10% -90% බෙදීමක් ඇති කරන හැරීමක් තෝරා ගත්තද (එය මෙහ් බෙදීමකි), සහ 1 මූලද්රව්යය - මූලද්රව්ය වෙනත් ආකාරයකින් බෙදී ගියද (එය ඔබට ලබා ගත හැකි නරකම භේදයයි) , අපගේ ධාවන කාලය තවමත් O ( n log n ) වේ (මෙය ඒකාබද්ධ කිරීම වර්ග කිරීම වේගවත් වුවත් එය නියතයන් පුපුරවා හරිනු ඇති බව සලකන්න).n−1O(nlogn)
ක්වික්සෝර්ට් සාමාන්යයෙන් බොහෝ වර්ග වලට වඩා වේගවත්ය
ක්වික්සෝර්ට් සාමාන්යයෙන් ට වඩා මන්දගාමී වන වර්ග වලට වඩා වේගවත් වේ (කියන්න, එහි O ( n 2 ) ධාවන කාලය සමඟ ඇතුළත් කිරීමේ වර්ග කිරීම ), විශාල n සඳහා සරලවමO(nlogn)O(n2)n ඒවායේ ධාවන කාලය පුපුරා යන නිසාය.
හීප්සෝර්ට් වැනි අනෙකුත් ඇල්ගොරිතම හා සසඳන විට ක්වික්සෝර්ට් ප්රායෝගිකව එතරම් වේගවත් වීමට හොඳ හේතුවක් වන්නේ එය සාපේක්ෂව හැඹිලි-කාර්යක්ෂම වීමයි. එහි ධාවන කාලය ඇත්ත වශයෙන්ම O ( n) වේO(nlogn), මෙහිBයනු බ්ලොක් ප්රමාණයයි. අනෙක් අතට, හීප්සෝර්ට්හි එවැනි වේගවත් කිරීමක් නොමැත: එය කිසිසේත් මතක හැඹිලියට කාර්යක්ෂමව ප්රවේශ නොවේ.O(nBlog(nB))B
මෙම හැඹිලි කාර්යක්ෂමතාවයට හේතුව එය ආදාන රේඛීයව පරිලෝකනය කිරීම සහ ආදානය රේඛීයව කොටස් කිරීමයි. මෙයින් අදහස් කරන්නේ අප හැඹිලිය තුළට පටවන සෑම අංකයක්ම කියවන විට අප කරන සෑම හැඹිලි බරකින්ම උපරිම ප්රයෝජන ගත හැකි බවයි. විශේෂයෙන්, ඇල්ගොරිතම හැඹිලි-නොසලකා හරින අතර එය සෑම හැඹිලි මට්ටමකටම හොඳ හැඹිලි කාර්ය සාධනයක් ලබා දෙන අතර එය තවත් ජයග්රහණයකි.
හැඹිලි කාර්යක්ෂමතාව O ( n) දක්වා තවදුරටත් වැඩිදියුණු කළ හැකිය, කොහෙදඑම්සඳහා භාවිතා කරනවා නම්, අපගේ ප්රධාන මතකය ප්රමාණය වේkQuicksort -way. ඒකාබද්ධ කිරීම ක්වික්සෝර්ට් හා සමාන හැඹිලි-කාර්යක්ෂමතාවයක් ඇති බව සලකන්න. ඇත්ත වශයෙන්ම එහි k-way අනුවාදය මතකය දැඩි බාධාවක් නම් වඩා හොඳ ක්රියාකාරීත්වයක් (අඩු නියත සාධක හරහා) ඇත. මෙය ඊළඟ කාරණයට මග පාදයි: අපට වෙනත් සාධක මත ක්වික්සෝර්ට් ඒකාබද්ධ කිරීම හා සැසඳිය යුතුය.O(nBlogMB(nB))Mk
Quicksort සාමාන්යයෙන් Mergesort ට වඩා වේගවත්ය
මෙම සංසන්දනය සම්පූර්ණයෙන්ම නියත සාධක පිළිබඳව වේ (අපි සාමාන්ය සිද්ධිය සලකා බැලුවහොත්). විෙශේෂෙයන්ම, ෙතෝරා ගැනීම ක්වික්සෝර්ට් සඳහා වන පයිවොට්හි උප ෙතෝරාගත් ෙතෝරා ගැනීමක් හා ඒකාබද්ධ කිරීම සඳහා වන සම්පූර්ණ ආදානයේ පිටපත අතර (ෙහෝ ෙමම පිටපත් කිරීම වළක්වා ගැනීමට අවශ්ය ඇල්ගොරිතමයේ සංකීර්ණතාව) අතර වේ. කලින් සඳහන් කළ දේ වඩා කාර්යක්ෂම බව එයින් පෙනේ: මේ පිටුපස කිසිදු න්යායක් නොමැත, එය වේගවත් වේ.
ක්වික්සෝර්ට් වඩාත් පුනරාවර්තන ඇමතුම් ලබා දෙන බව සලකන්න, නමුත් තොග ඉඩ වෙන් කිරීම ලාභදායී වේ (ඇත්ත වශයෙන්ම නොමිලේ, ඔබ තොගය පුපුරවා නොගන්නා තාක් කල්) සහ ඔබ එය නැවත භාවිතා කරයි. ෙයාදා මත යෝධ වාරණ වෙන් (හෝ ඔබේ දෘඪ තැටිය, නම් යනු ඇත්තටම විශාල) ටිකක් විතර වඩා මිල අධික වන අතර, එහෙත් ඒ දෙකම සාමාන්ය ( ලොග් n ) සංසන්දනය ඉතා බාල බව පොදු කාර්ය වියදම් සාමාන්ය ( n ) වැඩ ඉහත සඳහන්.nO(logn)O(n)
අවසාන වශයෙන්, ක්වික්සෝර්ට් නිවැරදි අනුපිළිවෙලට සිදුවන ආදානයට තරමක් සංවේදී වන බව සලකන්න, එම අවස්ථාවේදී එයට සමහර හුවමාරුව මඟ හැරිය හැක. Mergesort හි එවැනි ප්රශස්තිකරණ කිසිවක් නොමැත, එමඟින් Mergesort හා සසඳන විට Quicksort ටිකක් වේගවත් කරයි.
ඔබේ අවශ්යතාවන්ට ගැලපෙන වර්ග කිරීම භාවිතා කරන්න
අවසාන වශයෙන්: වර්ග කිරීමේ ඇල්ගොරිතමයක් සෑම විටම ප්රශස්ත නොවේ. ඔබගේ අවශ්යතාවන්ට ගැලපෙන එකක් තෝරන්න. ඔබට බොහෝ අවස්ථාවන් සඳහා ඉක්මන්ම ඇල්ගොරිතමයක් අවශ්ය නම්, එය දුර්ලභ අවස්ථාවන්හිදී ටිකක් මන්දගාමී වීමට ඉඩ ඇති බව ඔබට කමක් නැත, ඔබට ස්ථාවර වර්ග කිරීමක් අවශ්ය නොවේ නම්, ක්වික්සෝර්ට් භාවිතා කරන්න. එසේ නොමැතිනම්, ඔබේ අවශ්යතාවන්ට වඩාත් ගැලපෙන ඇල්ගොරිතම භාවිතා කරන්න.