91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
额尔古纳市| 霍邱县| 温宿县| 江津市| 家居| 公主岭市| 治县。| 舞阳县| 上犹县| 安吉县| 化隆| 抚顺县| 安达市| 罗甸县| 泰宁县| 青海省| 嘉祥县| 绵竹市| 台中县| 孙吴县| 丹江口市| 密山市| 蒙阴县| 彭州市| 三明市| 大英县| 台东市| 岐山县| 白河县| 绥江县| 文山县| 三穗县| 常山县| 临漳县| 晋中市| 阳泉市| 称多县| 中方县| 淮安市| 兴海县| 商城县|