PDA

View Full Version : سورت سریع آرایه با TBaseArray.Sort



Hadizadeh
سه شنبه 08 فروردین 1385, 15:09 عصر
باسلام. همونطور که احتمالا می دونید یک کلاس پایه TBaseArray جهت آبجکت های داخلی دلفی نظیر Listview وجود داره که این کامپونت ها با کمک این واسطه می تونند عملیاتی نظیر سورت یا مرتب سازی مقادیر موجود در آرایه های مرتبط با آنها را انجام بدهند. حالا سوال من اینه که آیا میشه از این کلاس پایه برای مرتب سازی آرایه های خودمان هم استفاده کنیم؟ برای کسب اطلاعات بیشتر در Help دلفی فقط سرچ کنید TBaseArray.
گذشته از این دوستان اگه الگوریتم سریعترین مرتب ساز آرایه ای رو دارن اینجا بگذارن ممنون میشم. میگن Shell Sort سریعترینه. اگه این طوره الگوریتمش رو هر کی می دونه ، لطف کنه اینجا بذاره. ممنون

Naficy
پنج شنبه 10 فروردین 1385, 02:18 صبح
مطابق راهنمای دلفی، کلاس TBaseArray مربوط به Decision Cube است و تنها در نسخه Enterprise دلفی یافت می شود.
به همین جهت استفاده از آن چندان مرسوم نیست. (و در آبجکتهای داخلی دلفی نیز استفاده نشده است. به خصوص در ListView)

اما در جواب به سوالتان، بله شما می توانید از این کلاس استفاده کنید، هر چند همانطور که گفتم چنین کاری مرسوم نیست. ضمنا نمی شه گفت با این کار سورت "سریع" خواهید داشت. تا جایی که من متوجه شدم متد Sort این کلاس هیچ کاری انجام نمی ده، و هر کلاس مشتق شده خودش باید پیاده سازی رو انجام بده.

در مورد سورت آرایه هم باید گفت، الگوریتمهای سورت بسیاری وجود دارند که هر یک در شرایط متفاوتی بهترین یا سریعترین محسوب می شوند. در کاربردهای عمومی بیشتر از QuickSort اصلاح شده استفاده می شود که شاید بهترین انتخاب نباشد، اما رایجترین انتخاب (به گمان من)، و البته "واقعا به حد کافی خوب" است. مثلا خود دلفی در TStringList.Sort یا ... از این الگوریتم استفاده کرده است.
برای کسب اطلاع بیشتر درباره الگوریتمهای سورت، منابع زیر را پیشنهاد می کنم:
1 - برای یک پیاده سازی ساده از الگوریتم QuickSort می تونید به خود سورس TStringList.QuickSort سری بزنید.
2 - یک کتاب ساختمان داده ها و الگوریتمها را بخوانید. (خود من کتاب تننباوم را پیشنهاد می کنم)
3 - جستجو/سوال در بخش "الگوریتم" همین سایت برنامه نویس.
4 - جستجو ی اینترنتی

Hadizadeh
پنج شنبه 10 فروردین 1385, 10:34 صبح
آقای نفیسی ممنونم از پاسخ شما. البته آرایه ای که من می خوام سورت کنم زیاد بزرگ و حجیم نیست و فکر کنم با همین Bubble Sort معمولی میشه کار رو جلو برد. اینکه به دنبال سرعت زیاد هستم به خاطر اینه که دارم یه کار کاملا Real-Time و حساس رو انجام می دم. مجددا ممنونم!

Naficy
جمعه 11 فروردین 1385, 05:37 صبح
خواهش می کنم.
ضمنا، استفاده از سورت های به قول شما حجیم، برای آرایه های کوچک اصلا توصیه نمی شه. چون این سورتها در سایزهای پایین، رفتار بدتری نسبت به سورت های ساده تر دارند.
اما هنوز گزینه برای انتخاب دارید. اگر واقعا کارتان حساس است، (و فقط در این صورت) بد نیست کمی درباره سورتها مطالعه کنید. آنهم فقط از کتاب. نه از منابع دیگر.