مرتب سازی ادغامی (Merge Sort) در سی شارپ
سلام توسعه دهندگان گرامی در این سری از آموزش برنامه نویسی سی شارپ به آموزش مرتب سازی ادغامی (Merge Sort) در سی شارپ و همینطور الگوریتم مرتب سازی ادغامی Merge Sort را مورد بررسی قرار میدهیم در ادامه با ما همراه باشید تا نحوه استفاده از مرتبسازی ادغامی (Merge Sort) در سی شارپ را یاد گیرید.
الگوریتم مرتبسازی ادغامی (Merge Sort)
روش مرتبسازی ادغامی از الگوریتم تقسیم و حل (divide-and-conquer) و همچنین ادغام برای مرتب کردن دادهها استفاده میکند. در این الگوریتم مسئله به چند جزء کوچکتر تقسیم میشود. هر کدوم از این قسمتها رو بهطور مجزا حل کرده، و با ترکیب اونها به مسئله اصلی میرسیم؛ و اما طرح کلی مرتبسازی ادغام:
در این روش دادهها به دو قسمت مساوی تقسیم میشوند؛ و هر کدوم از این قسمتها – به صورت بازگشتی – مرتب، و با ادغام آنها دادها به صورت کامل مرتب میشوند. اما توجه به این نکته ضروری است که اگر پس از یک بار تقسیم باز هم لیستهای ایجاد شده بزرگ باشند، میتوانیم برای هر زیر لیست مراحل بالا را دوباره انجام دهیم تا به زیر لیستهایی با تنها ۱ عضو برسیم و واضح است که لیست تک عنصری خود مرتب است.
از عکس زیر به منظور درک بهتر الگوریتم مرتبسازی ادغامی (Merge Sort) استفاده کنید.
در ادامه کد سی شارپ الگوریتم نام برده را برای شما قرار می دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | using System; using System.Collections.Generic; using System.Text; namespace prog { class Program { static public void mergemethod(int [] numbers, int left, int mid, int right) { int [] temp = new int[25]; int i, left_end, num_elements, tmp_pos; left_end = (mid - 1); tmp_pos = left; num_elements = (right - left + 1); while ((left <= left_end) && (mid <= right)) { if (numbers[left] <= numbers[mid]) temp[tmp_pos++] = numbers[left++]; else temp[tmp_pos++] = numbers[mid++]; } while (left <= left_end) temp[tmp_pos++] = numbers[left++]; while (mid <= right) temp[tmp_pos++] = numbers[mid++]; for (i = 0; i < num_elements; i++) { numbers[right] = temp[right]; right--; } } static public void sortmethod(int [] numbers, int left, int right) { int mid; if (right > left) { mid = (right + left) / 2; sortmethod(numbers, left, mid); sortmethod(numbers, (mid + 1), right); mergemethod(numbers, left, (mid+1), right); } } static void Main(string[] args) { int[] numbers = { 3, 8, 7, 5, 2, 1, 9, 6, 4 }; int len = 9; Console.WriteLine("MergeSort :"); sortmethod(numbers, 0, len - 1); for (int i = 0; i < 9; i++) Console.WriteLine(numbers[i]); Console.Read(); } } } |
خروجی کد بالا
1 2 3 4 5 6 7 8 9 10 | MergeSort : 1 2 3 4 5 6 7 8 9 |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.