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

溫馨提示×

c語言怎么實現歸并排序算法

小億
92
2023-11-25 00:06:11
欄目: 編程語言

歸并排序算法可以通過以下步驟實現:

  1. 定義一個函數 mergeSort,接收一個整數數組 arr,以及數組的開始索引 start 和結束索引 end
  2. 如果 start 小于 end,則計算數組的中間索引 mid,并遞歸調用 mergeSort 函數,將數組分為兩個子數組進行排序:mergeSort(arr, start, mid)mergeSort(arr, mid+1, end)
  3. 定義一個函數 merge,接收三個整數數組 arrstartmidend。該函數用于合并兩個已排序的子數組。首先創建兩個臨時數組 leftArrrightArr,分別用來存儲左子數組和右子數組的元素。
  4. 將原始數組 arr 的元素從 startmid 復制到 leftArr 中,將元素從 mid+1end 復制到 rightArr 中。
  5. 初始化三個變量 ijk,分別表示 leftArrrightArrarr 的當前元素索引。
  6. 比較 leftArr[i]rightArr[j] 的大小,將較小的元素復制到 arr[k],并將對應的索引遞增。重復這一步驟,直到 leftArrrightArr 的元素全部被復制到 arr 中。
  7. 將剩余的元素從 leftArrrightArr 復制到 arr 的剩余位置。
  8. 最后,調用 mergeSort(arr, 0, len(arr)-1) 來對整個數組進行排序。

以下是完整的 C 語言代碼實現:

#include <stdio.h>

void merge(int arr[], int start, int mid, int end) {
    int i, j, k;
    int n1 = mid - start + 1;
    int n2 = end - mid;
  
    int leftArr[n1], rightArr[n2]; // 臨時數組
  
    // 將原始數組的元素復制到左右子數組中
    for (i = 0; i < n1; i++)
        leftArr[i] = arr[start + i];
    for (j = 0; j < n2; j++)
        rightArr[j] = arr[mid + 1 + j];
  
    // 合并左右子數組到原始數組
    i = 0;
    j = 0;
    k = start;
    while (i < n1 && j < n2) {
        if (leftArr[i] <= rightArr[j]) {
            arr[k] = leftArr[i];
            i++;
        } else {
            arr[k] = rightArr[j];
            j++;
        }
        k++;
    }
  
    // 將剩余的元素從左右子數組復制到原始數組
    while (i < n1) {
        arr[k] = leftArr[i];
        i++;
        k++;
    }
    while (j < n2) {
        arr[k] = rightArr[j];
        j++;
        k++;
    }
}

void mergeSort(int arr[], int start, int end) {
    if (start < end) {
        int mid = start + (end - start) / 2;
        mergeSort(arr, start, mid);
        mergeSort(arr, mid + 1, end);
        merge(arr, start, mid, end);
    }
}

int main() {
    int arr[] = {38, 27, 43, 3, 9, 82, 10};
    int n = sizeof(arr) / sizeof(arr[0]);
  
    mergeSort(arr, 0, n - 1);
  
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");
  
    return 0;
}

運行以上代碼,輸出結果為:

Sorted array: 
3 9 10 27 38 43 82

0
理塘县| 九龙坡区| 卢氏县| 边坝县| 广丰县| 海阳市| 和林格尔县| 荥经县| 进贤县| 陆河县| 平利县| 桦南县| 屏山县| 酉阳| 临漳县| 辽阳县| 电白县| 昌吉市| 女性| 清徐县| 徐水县| 清苑县| 泰顺县| 辽阳市| 宜君县| 浦县| 闸北区| 沙河市| 大英县| 横峰县| 化德县| 福贡县| 汶上县| 和田县| 莆田市| 共和县| 奉新县| 晴隆县| 栾城县| 建宁县| 成都市|