สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Merge Sort

การเรียงลำดับด้วย Merge Sort ในภาษา C: ชั้นเรียนของข้อมูลที่มีประสิทธิภาพ Merge Sort: การจัดเรียงที่มีประสิทธิภาพด้วย PHP ทำความรู้จักกับ Merge Sort ในบริบทของ Next.js เรียนรู้การจัดเรียงข้อมูลด้วย Merge Sort ใน Node.js การจัดเรียงด้วย Merge Sort ด้วยภาษา Fortran: การศึกษาอย่างมีเหตุผล รู้จักกับ Merge Sort และการใช้งานในภาษา Delphi Object Pascal การจัดเรียงข้อมูลด้วย Merge Sort ใน MATLAB Merge Sort: การจัดเรียงข้อมูลอย่างมีประสิทธิภาพด้วย Swift ทำความรู้จักกับ Merge Sort: การเรียงลำดับที่ทรงพลังด้วย Kotlin การจัดเรียงข้อมูลด้วย Merge Sort ในภาษา COBOL เข้าใจ Merge Sort: ศาสตร์แห่งการเรียงลำดับใน Objective-C ทำความรู้จักกับ Merge Sort ในภาษา Dart รู้จัก Merge Sort: อัลกอริธึมการเรียงลำดับที่ทรงพลังในภาษา Scala การทำความเข้าใจ Merge Sort ด้วยภาษา R: เส้นทางสู่การพัฒนาทักษะการเขียนโปรแกรม การทำความรู้จักกับ Merge Sort รู้จักกับ Merge Sort: เทคโนโลยีการจัดเรียงที่โดดเด่นในโลกของการโปรแกรม การเรียงลำดับข้อมูลด้วย Merge Sort ในภาษา VBA รู้จักกับ Merge Sort และการใช้งานที่น่าสนใจในภาษา Julia รู้จักกับ Merge Sort ในภาษา Haskell: ความลับแห่งการจัดเรียงข้อมูล เรียนรู้ Merge Sort: การจัดเรียงอย่างมีกลยุทธ์ด้วย Groovy รู้จักกับ Merge Sort อัลกอริธึมที่จัดเรียงข้อมูลอย่างมีประสิทธิภาพด้วย Ruby การเรียงลำดับแบบ Merge Sort และการประยุกต์ใช้ในภาษา C++ Merge Sort การลำดับความเรียงเรียบอันประทับใจด้วยภาษา Java รู้จักกับ Merge Sort ในภาษา C# อัลกอริธึมที่มีเสน่ห์ไม่เสื่อมคลาย ความลับของ Merge Sort และการประยุกต์ใช้ในภาษา VB.NET การเรียงลำดับข้อมูลด้วย Merge Sort ใน Python และการใช้งานในโลกจริง Merge Sort: แนวคิดและการปฏิบัติงาน Merge Sort คืออะไรและมันใช้แก้ปัญหาอะไร การเรียงลำดับด้วย Merge Sort ในภาษา Perl Merge Sort in Lua บทความMerge Sort กับการประยุกต์ใช้ในภาษา Rust และวิเคราะห์ความซับซ้อน

การเรียงลำดับด้วย Merge Sort ในภาษา C: ชั้นเรียนของข้อมูลที่มีประสิทธิภาพ

 

 

ตอนที่ 1: Merge Sort คืออะไร?

การเรียงลำดับข้อมูลเป็นหนึ่งในปัญหาพื้นฐานที่โปรแกรมเมอร์ต้องเผชิญในโลกแห่งการคำนวณ หนึ่งในอัลกอริทึมที่ได้รับการยอมรับและใช้งานอย่างกว้างขวางคือ Merge Sort ซึ่งเป็นอัลกอริทึมที่มีประสิทธิภาพและมักใช้ในหลายๆ ระบบเพื่อเรียงข้อมูลได้อย่างรวดเร็วและมีระเบียบ

Merge Sort มีหลักการคือการแบ่งข้อมูลที่ต้องการเรียงลำดับออกเป็นส่วนย่อยๆ (Divide) จนกระทั่งแต่ละส่วนประกอบด้วยข้อมูล 1 ชิ้น จากนั้นจึงค่อยๆ รวมกลุ่มข้อมูลย่อยๆ กลับเข้าด้วยกัน (Conquer) ในลักษณะที่มีลำดับที่ถูกต้อง

 

ตอนที่ 2: อัลกอริทึม Merge Sort ในภาษา C


#include 
#include 

void merge(int arr[], int l, int m, int r) {
    int i, j, k;
    int n1 = m - l + 1;
    int n2 = r - m;

    // สร้าง arrays ชั่วคราว
    int L[n1], R[n2];

    // คัดลอกข้อมูลไปยัง arrays ชั่วคราว L[] และ R[]
    for(i = 0; i < n1; i++)
        L[i] = arr[l + i];
    for(j = 0; j < n2; j++)
        R[j] = arr[m + 1+ j];

    // รวม arrays ชั่วคราวกลับไปยัง arr[l..r]
    i = 0; j = 0; k = l; // ตั้งค่า index ของ subarray สองอันและ array เดิม
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        }
        else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }

    // คัดลอกส่วนที่เหลือของ L[], ถ้ามี
    while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }

    // คัดลอกส่วนที่เหลือของ R[], ถ้ามี
    while (j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

void mergeSort(int arr[], int l, int r) {
    if (l < r) {
        // หาจุดกึ่งกลางของ array
        int m = l+(r-l)/2;

        // เรียกใช้ mergeSort กับครึ่งแรกและครึ่งหลังอย่างต่อเนื่อง
        mergeSort(arr, l, m);
        mergeSort(arr, m+1, r);

        // รวมเข้าด้วยกัน
        merge(arr, l, m, r);
    }
}

// ฟังก์ชันเพื่อแสดงผล array
void printArray(int A[], int size) {
    int i;
    for (i=0; i < size; i++)
        printf("%d ", A[i]);
    printf("\n");
}

int main() {
    int arr[] = {12, 11, 13, 5, 6, 7};
    int arr_size = sizeof(arr)/sizeof(arr[0]);

    printf("Given array is \n");
    printArray(arr, arr_size);

    mergeSort(arr, 0, arr_size - 1);

    printf("\nSorted array is \n");
    printArray(arr, arr_size);
    return 0;
}

 

 

หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง


Tag ที่น่าสนใจ: merge_sort การเรียงลำดับ ภาษา_c อัลกอริทึม การเขียนโปรแกรม เรียนรู้ การคำนวณ การแบ่งข้อมูล การรวมข้อมูล การคัดลอกข้อมูล การเรียงข้อมูล การเรียน ฟังก์ชัน_c การแสดงผล ประสิทธิภาพ


บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา