PDA

View Full Version : سوال: الگوریتم مرتب کردن اعداد



batman1
سه شنبه 07 مهر 1394, 16:32 عصر
سلام به همه.
الگوریتمی میخوام که وقتی کاربر در سمت چپ یک سری اعداد نامرتب را وارد میکند،بعد از وارد کردن خط فاصله،با زدن دکمه،اعداد را به صورت مرتب دوباره بچیند.مثل تصویر زیر:
135568
هرچی فکرکردم به نتیجه ای نرسیدم.
ممنون میشم کمکم کنید

pbm_soy
سه شنبه 07 مهر 1394, 19:12 عصر
احتمالا مرتب سازی کلاسیک را بلدید یعنی مقادیر موجود در ارایه را میتوانید مرتب کنید
خوب اعداد موجود در تکست باکس را از هم جدا کنید و هر رقم را در یک خانه آارایه بریزید و سپس کار مرتب سازی را انجام دهید
چون با گوشی دارم مینویسم‌نوشتن دستورات سخت میشه ولی راحت میتوانید از متد tochararray موجود در تکست باکس استفاده کنید تقریبا بصورت زیر



Char[] x=textbox1.text.tochararray();


داخل آرایه x تک تک کاراکترهای تکستباکس قرار میگیرد و حالا میتوانید آنرا با متد array.sort(x) مرتب کنید و سپس نمایش دهید

group45
چهارشنبه 08 مهر 1394, 07:58 صبح
با سلام
شما مقادیرتون رو داخل یه array بریزید و فقط کافیه array.sort رو بزنید.

SabaSabouhi
چهارشنبه 08 مهر 1394, 12:02 عصر
سلام
یه راه دیگه هم من پیش‌نهاد می‌کنم، استفاده از Extension Methodها.


var list = MyTextBox.Text
.Split('-')
.ToList()
.Convert( x => int.Parse( x ) )
.OrderBy( x=> x );
MyTextBox.Text = string.Join( '-', list );

اول با split رشته رو تکه تکه می‌کنی ( جدا کننده «-» هست )
برای با متد ToList خروجی split رو که []string هست تبدیل به <list<string می‌کنی
بعد با تابع int.Parse تکه‌ها رو تبدیل به عدد می‌کنی. در این مرحله مناسب هست که کنترل خطا هم انجام بدی
که مثلاً حروف وارد نشده باشه یا دو تا «-» به صورت پیاپی وارد نشده باشه یا . . .
بعد با متد OrderBy فهرست رو مرتب می‌کنی
و در آخر با متد string.Join دوباره اون‌ها رو با جداکننده‌ی «-» به هم می‌چسبونی.
چون string.Join ورودی رو IEnumerable قبول می‌کنه دیگه لازم نیست در آخر یک ToList اضافی
داشته باشیم. اما اگه استفاده‌ی دیگه‌ای می‌خوای از این نتیجه داشته باشی، باید پس از OrderBy یه
متد ToList هم اضافه کنی.

صبا صبوحی