亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
宣汉县| 綦江县| 内黄县| 红河县| 壤塘县| 镇雄县| 旺苍县| 临湘市| 宁国市| 合水县| 内江市| 调兵山市| 宁陕县| 菏泽市| 娄烦县| 黔西县| 公主岭市| 亚东县| 大港区| 英山县| 兴仁县| 和林格尔县| 本溪市| 巫溪县| 海原县| 河间市| 平乡县| 兴和县| 扬中市| 巴林左旗| 卓尼县| 个旧市| 巨野县| 宜城市| 扶余县| 新巴尔虎右旗| 四川省| 黄浦区| 五家渠市| 绥江县| 沧州市|