I-MergeSort Algorithm ku-C ne-Java

Isibuyekezo sokugcina: I-6 March ka-2026
  • I-MergeSort isebenzisa i-divide and conquer ukuhlunga ngokuphindaphindeka, esebenza kahle kumasethi amakhulu.
  • Ubunzima besikhathi: O(n log n), bungcono uma kuqhathaniswa nama-algorithms e-quadratic afana ne-Bubble noma i-Selection.
  • Kuzinzile: kulondoloza ukuhleleka okuhlobene kwama-duplicate, okuwusizo lapho i-oda lokuqala libalulekile.
  • Kudinga inkumbulo eyengeziwe nge-subarray ngayinye; ingahlanganiswa nezinye izindlela zokuthuthukisa ukusebenza.
I-MergeSort Algorithm

Ukuhlunga idatha kuwumsebenzi obalulekile ekuhleleni nasekuhlaziyeni i-algorithm. Maningi amasu okuhlunga atholakalayo, futhi enye esebenza kahle kakhulu i-algorithm ye-MergeSort. Le algorithm isebenzisa indlela "yokuhlukanisa futhi unqobe" ukuze kuhlelwe uhlu lwama-elementi ngokuphindaphinda.

Kulesi sihloko, sizogxila ekusebenziseni i- algorithm ye-MergeSort ezilimini zokuhlela ze-C kanye ne-Java. Sizohlola isinyathelo ngesinyathelo ukuthi le algorithm isebenza kanjani nokuthi ungayisebenzisa kanjani kumaphrojekthi akho. Sizoxoxa nangokuba yinkimbinkimbi kwesikhathi se-MergeSort futhi siqhathanise ukusebenza kwayo namanye ama-algorithms okuhlunga.

I-MergeSort Algorithm ku-C ne-Java

I -algorithm ye-MergeSort isebenzisa isu lokuhlukanisa nokunqoba ukuhlunga uhlu lwezinto. Inqubo yenziwa ngezigaba ezintathu eziyinhloko: ukuhlukanisa, ukunqoba, nokuhlanganisa. Ake sibone ukuthi singayisebenzisa kanjani le algorithm ezilimini zokuhlela ze-C ne-Java.

Ukwenziwa Kwe-MergeSort ku-C

Nakhu ukuqaliswa kwe-algorithm ye-MergeSort ku-C:

#include <stdio.h>

void merge(int arr[], int left[], int right[], int left_size, int right_size) {
    int i = 0, j = 0, k = 0;
    
    while (i < left_size && j < right_size) {
        if (left[i] <= right[j]) {
            arr[k] = left[i];
            i++;
        } else {
            arr[k] = right[j];
            j++;
        }
        k++;
    }
    
    while (i < left_size) {
        arr[k] = left[i];
        i++;
        k++;
    }
    
    while (j < right_size) {
        arr[k] = right[j];
        j++;
        k++;
    }
}

void mergeSort(int arr[], int size) {
    if (size < 2) {
        return;
    }
    
    int mid = size / 2;
    int left[mid];
    int right[size - mid];
    
    for (int i = 0; i < mid; i++) {
        left[i] = arr[i];
    }
    
    for (int i = mid; i < size; i++) {
        right[i - mid] = arr[i];
    }
    
    mergeSort(left, mid);
    mergeSort(right, size - mid);
    merge(arr, left, right, mid, size - mid);
}

int main() {
    int arr[] = {9, 5, 2, 7, 1, 8, 3};
    int size = sizeof(arr) / sizeof(arr[0]);
    
    mergeSort(arr, size);
    
    printf("Sorted array: ");
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    
    return 0;
}

Kulokhu kuqaliswa, siqale sichaze umsebenzi merge enesibopho sokuhlanganisa ama-subarrays amabili ahlelekile abe amalungu afanayo amakhulu. Bese umsebenzi mergeSort ngokuphindaphindiwe ihlukanisa amalungu afanayo abe ama-subarray amancane futhi awahlunge kusetshenziswa umsebenzi merge. Ekugcineni, emsebenzini main, sakha uhlu lokuhlola, siyabiza mergeSort futhi sibonisa ilungiselelo elihlungiwe esikrinini.

  Ukuhlola I-algorithm YokuQala Oza Kuqala

Isebenzisa i-MergeSort ku-Java

Manje, ake sibone ukuthi singayisebenzisa kanjani i-algorithm ye-MergeSort ku-Java:

public class MergeSort {
    public static void merge(int[] arr, int[] left, int[] right) {
        int i = 0, j = 0, k = 0;

        while (i < left.length && j < right.length) {
            if (left[i] <= right[j]) {
                arr[k] = left[i];
                i++;
            } else {
                arr[k] = right[j];
                j++;
            }
            k++;
        }

        while (i < left.length) {
            arr[k] = left[i];
            i++;
            k++;
        }

        while (j < right.length) {
            arr[k] = right[j];
            j++;
            k++;
        }
    }

    public static void mergeSort(int[] arr) {
        if (arr.length < 2) {
            return;
        }

        int mid = arr.length / 2;
        int[] left = new int[mid];
        int[] right = new int[arr.length - mid];

        System.arraycopy(arr, 0, left, 0, mid);
        System.arraycopy(arr, mid, right, 0, arr.length - mid);

        mergeSort(left);
        mergeSort(right);
        merge(arr, left, right);
    }

    public static void main(String[] args) {
        int[] arr = {9, 5, 2, 7, 1, 8, 3};

        mergeSort(arr);

        System.out.print("Sorted array: ");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

Kulokhu kuqaliswa kwe-MergeSort ku-Java, sisebenzisa izindlela ezimile zomsebenzi merge y mergeSort. Umsebenzi merge yenza umsebenzi ofanayo njengasekuqalisweni kwe-C, kanye nomsebenzi mergeSort ilandela umqondo ofanayo wokuhlukanisa nokuhlanganisa ama-subarrays. Emcimbini main, sakha uhlu lokuhlola, siyabiza mergeSort futhi sibonisa uhlu oluhleliwe ku-console.

Iyini inkimbinkimbi yesikhathi ye-algorithm ye-MergeSort?

Isikhathi esiyinkimbinkimbi se-algorithm ye-MergeSort sithi O(n log n), lapho u-“n” emelela inani lezinto kuhlelo oluzohlungwa. Lokhu kusho ukuthi isikhathi sokusebenza se-algorithm sikhuphuka ngokulingana nomkhiqizo othi "n" kanye nesisekelo esingu-2 logarithm sokuthi "n". Le nkimbinkimbi yenza i-MergeSort ibe enye yama-algorithms okuhlunga asebenza kahle kakhulu atholakalayo.

Ukuqhathaniswa kwe-MergeSort namanye ama-algorithms okuhlunga

I-MergeSort igqama ngokusebenza kahle kwayo ekuhleleni idatha. Uma kuqhathaniswa namanye ama-algorithms adumile afana nokuhlunga kwe-Bubble noma Ukukhetha Ukukhetha, i-MergeSort inobunzima besikhathi obungcono kakhulu. Ngenkathi Ukuhlunga Kwebhamuza Nokuhlunga kunokuxaka kwesikhathi kwe-O(n^2), i-MergeSort inesikhathi esiyinkimbinkimbi se-O(n log n). Lokhu kusho ukuthi i-MergeSort iyakwazi ukuphatha amavolumu amakhulu wedatha ngempumelelo nangokushesha kunalawa ma-algorithms asebenza kancane.

  Izibonelo ze-Quantitative Algorithm: Izicelo Ezisebenzayo kanye Nezimo

Imibuzo ebuzwa njalo

1: Kungani usebenzise i-MergeSort esikhundleni sokunye ukuhlela ama-algorithms?

I-MergeSort ikhethwa ngaphezu kwamanye ama-algorithms okuhlunga ngenxa yokusebenza kahle kwayo nokusebenza kwayo. Ngenkimbinkimbi yesikhathi ye-O(n log n), i-MergeSort iyakwazi ukuhlunga amasethi amakhulu edatha ngokushesha nangokuphumelelayo kunama-algorithms anobunzima obuyi-quadratic, Njengokuhlunga Kwebhamuza noma Ukuhlunga Okukhethiwe. Ukwengeza, i-MergeSort iyi-algorithm ezinzile, okusho ukuthi igcina ukuhleleka okuhlobene kwezinto ezinamavelu alinganayo, okungaba okubalulekile kuzimo ezithile.

2: Kufanele ngisebenzise nini i-MergeSort kumaphrojekthi ami?

Ungase ucabange ukusebenzisa i-MergeSort uma udinga ukuhlela amasethi amakhulu edatha kahle. Uma unohlu lwezinto ezingahlelekile futhi ufuna ukuthola uhlu oluhleliwe ngesikhathi esifushane ngangokunokwenzeka, i-MergeSort iyindlela enhle kakhulu. Kodwa-ke, qaphela ukuthi i-MergeSort ingase idinge isikhala sememori esengeziwe uma iqhathaniswa namanye ama-algorithms okuhlunga ngoba idala ama-subarrays angeziwe ngesikhathi sokwenziwa kwayo.

3: Ingabe kukhona okungalungile ngokusebenzisa i-MergeSort?

Okungase kube kubi kwe-MergeSort ukusetshenziswa kwayo okwengeziwe kwememori. Ngesikhathi sokwenziwa kwe-algorithm, ama-subarrays engeziwe adalwe ukuze ahlukanise futhi ahlanganise idatha, engakhuphula izidingo zememori, ikakhulukazi uma isebenza ngamasethi amakhulu kakhulu wedatha. Kodwa-ke, ezimweni eziningi, lokhu kungalungile akusho lutho uma kuqhathaniswa nokusebenza kahle kwe-algorithm.

4: Ingabe i-MergeSort ingakwazi ukuphatha izici eziyimpinda ohlwini?

Yebo, i-MergeSort ingaphatha izinto eziyimpinda ohlwini. I-algorithm izinzile, okusho ukuthi igcina ukuhleleka okuhlobene kwama-elementi anamanani alinganayo. Lokhu kubalulekile uma ufuna ukulondoloza i-oda langempela lezinto uma kwenzeka kuba nezimpinda. I-MergeSort iqinisekisa ukuthi ama-elementi ayimpinda avela ngokulandelana okufanayo kukho kokubili amalungu afanayo okokufaka kanye namalungu afanayo ahlungiwe.

  Isebenza kanjani i-algorithm ye-RSA? Konke odinga ukukwazi

5: Ingabe kukhona okuhlukile noma ukuthuthukiswa kwe-algorithm ye-MergeSort?

Yebo, kukhona okuhlukile nokuthuthukiswa kwe-algorithm ye-MergeSort. Okunye kwalokhu okuhlukile kufaka phakathi i-MergeSort ephindaphindayo, i-MergeSort enokuthuthukiswa kokuhlanganisa kwe-subarray, kanye ne-hybrid MergeSort ehlanganisa i-MergeSort nenye i-algorithm yokuhlunga, efana ne-Insertion Sort, ukuze kuzuzwe ukusebenza okungcono ezimeni ezithile. Lezi zinhlobonhlobo zifuna ukuthuthukisa ukusebenza nokusebenza kahle kwe-algorithm ye-MergeSort ezimeni ezithile.

6: Ngingakufunda kuphi okwengeziwe mayelana ne-MergeSort namanye ama-algorithms okuhlunga?

Uma ufuna ukufunda kabanzi mayelana ne-MergeSort namanye ama-algorithms wokuhlela, ungabheka izinsiza ezilandelayo:

Isiphetho

Kulesi sihloko, sihlole i-algorithm ye-MergeSort ngezilimi zokuhlela ze-C ne-Java. Sifunde ukuthi singayisebenzisa kanjani le-algorithm yokuhlunga idatha ephumelelayo futhi saxoxa ngobunkimbinkimbi besikhathi sayo. Ngezibonelo ezinemininingwane nezincazelo, manje usunokuqonda okuqinile kokuthi i-MergeSort isebenza kanjani ku-C ne-Java, nokuthi ungayisebenzisa kanjani kumaphrojekthi akho.

I-MergeSort iyithuluzi elinamandla lokuhlunga amasethi amakhulu edatha kanye nobunkimbinkimbi besikhathi bayo be-O(n log n) kuyenza ibe inketho ekhangayo uma iqhathaniswa namanye ama-algorithms okuhlunga angasebenzi kahle. Uma udinga ukuhlunga idatha kahle futhi ngokushesha, cabanga ukusebenzisa i-MergeSort njenge-algorithm oyikhethayo.

Hlola futhi ulinge nge-MergeSort kumaphrojekthi akho ukuze uvune izinzuzo zayo futhi ujabulele ukusebenza okuhle kokuhlela idatha!