منظور از مرتب کردن یک لیست یا یک فایل، قرار دادن عناصر آنها به ترتیبی معقول و منطقی است که شامل مرتب سازی نزولی به صعودی وبالعکس می باشد.
اگر یک لیست مرتب به نام A داشته باشیم و طول این لیست که میتواند شامل داده های مختلفی اعم از قد،وزن،نمره کلاسی و... ، n باشد ،در این صورت داده های این لیست را بر اساس نوع نزولی به صعودی میشود به این صورت مرتب گرد:
A:A(1)<= A(1)<= A(2)<= A(3)<= A(4)<= A(5)<= A(6)<= A(7)<= A(8)<= A(9)<= A(10)<= …<= A(n)
در زبان برنامه نویسی php توابعی وجود دارد که بر اساس نیاز میتوانید از آنها استفاده کنید ولی در برخی از پروژه ها نیاز است که برای مرتب سازی داده ها خودمان تابعی بسازیم و از آن استفاده کنیم که به این دلیل باید بر الگو های مرتب سازی در زبان های برنامه نویسی تسلط کافی داشته باشیم.
در این مقاله قصد داریم الگوریتم های مرتب سازی آرایه ها در php را بیان کنیم.
الگوریتم های مشهور مرتب سازی
- روش مرتب سازی تعویضی
- روش مرتب سازی انتخابی
- روش مرتب سازی درج
هر الگوی مرتب سازی خود دارای الگوریتم هایی است که به وسیله ی آن در قالب الگوی اصلی خود عمل مرتب سازی را انجام میدهد.
روش مرتب سازی تعویضی(exchange)
از الگوریتم های به کار گرفته شده در این روش میتوان به الگوریتم حبابی اشاره نمود که یکی از الگوریتم های ضعیف و کند مرتب سازی میباشد که به روش تعویض داده ها کار میکند.
الگوریتم حبابی
در این روش عناصر متوالی یک لیست به عن.ان مثال نام دانشجویان یک کلاس ،از ابتدای لیست با یکدیگر مقایسه شده و چنانچه مرتب نباشند جای آنها با هم عوض میشد.این عمل تاجایی ادامه میابد که نام دانشجویان بر اساس حروف الفبا از اول تا آخر مرتب شود.در هر مرحله از این مقایسه بزرگترین عنصر(در اینجا حرف بعد میباشد)به انتهای لیست منتقل میگردد.
برای تعداد حالت های ممکن با استفاده از احمال میتوانید تعداد مقایسه ها و تعویض ها را در بدترین، متوسط و بهترین حالت تعیین نمود.
در مثال زیر نمونه ای از مرتب سازی به روش تعویضی و الگوریتم حبابی را مشاهده نمایید:
فرض میکنیم آرایه ی s دارای رشته های dcab باشد و ما میخواهیم آنرا به این روش مرتب نماییم...
روش مرتب سازی انتخابی(selection)
این الگو به این صورت است که در بین عناصر لیست، کوچکترین عنصر لیست پیدا شده و جای آن با عنصر اول عوض میشود.در مرحله ی بعد کوچکترین عنصر لیست(به غیر از عنصر اول)پیداشده و جای آن با عنصر دوم عوض میشود و این تاجایی که اولین عنصر کوچیترین و آخرین عنصر بزرگترین داده ی ما شود و لیست مرتب گردد ادامه میابد.
در این روش تعداد مقایسه ها به مراتب کمتر از روش تعویضی است.
(همان طور که میدانید برای مرتب سازی باید از حلقه استفاده نماییم از این رو تعداد اجرای حلقه در روند سرعت برنامه بسیار مهم است).
روش مرتب سازی درج (insertion)
در روش مرتب سازی درج،ابتدا دو عنصر اول لیست مرتب میشوند و سپس عنصر سوم نسبت به عناصر دوم و اول در جای مناسبی قرار میگیرد(به طور مرتب)وسپس عنصرچهارم نسبت به عنصر اول و دوم و سوم درجای مناسب خود به طور مرتب قرار میگیرد تا مرتب سازی لیست به طور کامل انجام شود.
بدیهی است که در لیست هایی که داده ها با پراکنی بالایی وجود دارند و نیز تهعداد داده ها زیاد میباشد این الگو توصیه نمیشود و از الگوی مرتب سازی تعویضی و الگوریتم حبابی آن ضعیفتر عمل خواهد کرد.
روش مرتب سازی در لیست هایی توصیه میشود که عناصر آنها تقریبا مرتب است تا تعداد تعویض ها و مقایسه ها کم باشد و نیز در مورد مقادیر مساوی عمل تعویض را انجام نمیدهد.
موارد بالا الگوریتم های مشهوری بود که برای مرتب سازی از آنها استفاده میشود در ادامه با تابع هایی از php آشنا خواهیم شد که برای مرتب سازی مورد استفاده قرار میگیرند:
- sort و rsort :جهت مرتبسازی آرایه های اندیسی یا عددی (صعودی – نزولی)
- asort و arsort :مرتبسازی آرایه های انجمنی به صورت صعودی - نزولی و براساس مقدار
- ksort و krsort :مرتبسازی آرایه های انجمنی به صورت صعودی - نزولی بر اساس کلید
تابع sort در php
$name = array ("majid", "alireza", "mahshid", "siavash"); sort($name); print_r($name);
که خروجی آن به صورت: Array ( [0] => alireza [1] => mahshid [2] => majid [3] => siavash )خواهد بود.
تابع rsort مرتب سازی از صعودی به نزولی میباشد.
تابع asort در php
ز این تابع برای مرتب کردن آرایه های انجمنی بر اساس مقدار و به صورت صعودی (از پایین به بالا) استفاده می شود. فرق این تابع با تابع sort در حفظ اندیس هر مقدار می باشد :
$age = array("alireza"=>20, "siavash"=>14, "mahshid"=>45, "saman"=>35); asort($age); print_r($age);
که خروجی آن به صورت : Array ( [siavash] => 14 [alireza] => 20 [saman] => 35 [mahshid] => 45 )
arsort مرتب سازی از صعودی به نزولی می باشد.
تابع ksort در php
از این تابع برای مرتب کردن آرایه های انجمنی بر اساس کلید و به صورت صعودی (از پایین به بالا) استفاده می شود. این تابع اندیس هر مقدار را بعد از مرتبسازی حفظ می کند:
$age = array("alireza"=>20, "siavash"=>14, "mahshid"=>45, "saman"=>35); ksort($age); print_r($age);
که خروجی آن به صورت Array ( [alireza] => 20 [mahshid] => 45 [saman] => 35 [siavash] => 14 ) خواهد بود.
Krsort مرتب سازی از صعودی به نزولی میباشد.
دقت کنید با توجه به نوع داده ها در پروژه تان میتوانید از توابع phpاستفاده نمایید و یا خودتان با توجه به الگوها تابع مورد نظرتان را ایجاد و از آن استفاده نمایید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید