中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

C語言歸并排序算法代碼怎么寫

小億
89
2023-12-09 01:07:56
欄目: 編程語言

下面是C語言中歸并排序算法的代碼示例:

#include <stdio.h>

// 歸并排序函數
void merge(int arr[], int left, int mid, int right) {
    int i, j, k;
    int n1 = mid - left + 1;
    int n2 = right - mid;

    // 創建臨時數組
    int L[n1], R[n2];

    // 將數據拷貝到臨時數組 L[] 和 R[] 中
    for (i = 0; i < n1; i++)
        L[i] = arr[left + i];
    for (j = 0; j < n2; j++)
        R[j] = arr[mid + 1 + j];

    // 合并臨時數組到 arr[left..right]
    i = 0;
    j = 0;
    k = left;
    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 left, int right) {
    if (left < right) {
        // 計算中間點
        int mid = left + (right - left) / 2;

        // 遞歸地排序左半部分和右半部分
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);

        // 合并已排序的兩部分
        merge(arr, left, mid, right);
    }
}

// 測試代碼
int main() {
    int arr[] = {38, 27, 43, 3, 9, 82, 10};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("原數組:\n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);

    mergeSort(arr, 0, n - 1);

    printf("\n排序后的數組:\n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);

    return 0;
}

這段代碼實現了歸并排序算法。merge() 函數用于將兩個已排序的子數組合并為一個。mergeSort() 函數用于遞歸地排序數組的左半部分和右半部分,并最終將它們合并為一個完整的已排序數組。在 main() 函數中,我們定義了一個數組并調用 mergeSort() 函數對其進行排序,然后輸出排序后的結果。

0
赤峰市| 罗田县| 和静县| 海林市| 松滋市| SHOW| 婺源县| 湾仔区| 宁德市| 南投市| 汝南县| 千阳县| 崇义县| 马尔康县| 新疆| 旬邑县| 巴彦淖尔市| 大理市| 桃园县| 禄劝| 正定县| 北京市| 鄂伦春自治旗| 凌云县| 揭东县| 安丘市| 宽甸| 永昌县| 米脂县| 元阳县| 宝丰县| 深泽县| 阿坝县| 四平市| 楚雄市| 阿荣旗| 加查县| 武陟县| 广河县| 石狮市| 安仁县|