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

溫馨提示×

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

小億
75
2023-11-04 15:14:04
欄目: 編程語言

歸并排序是一種分治算法,其思想是將待排序的序列分為兩個子序列,對每個子序列進行遞歸的歸并排序,最后將兩個有序的子序列合并成一個有序的序列。具體步驟如下:

  1. 將待排序序列分為兩個子序列,每個子序列的長度為 n/2,其中 n 是待排序序列的長度。
  2. 對兩個子序列分別進行遞歸的歸并排序。
  3. 將兩個已經排好序的子序列合并成一個有序的序列。

下面是使用 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];
    
    // 將待排序序列分別復制到臨時數組中
    for (i = 0; i < n1; i++) {
        L[i] = arr[left + i];
    }
    for (j = 0; j < n2; j++) {
        R[j] = arr[mid + 1 + j];
    }
    
    // 將兩個子序列按照從小到大的順序合并到原數組中
    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++;
    }
    
    // 將剩余的元素復制到原數組中
    while (i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }
    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[] = { 12, 11, 13, 5, 6, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
    
    printf("原始數組:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    mergeSort(arr, 0, n - 1);
    
    printf("排序后的數組:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    return 0;
}

運行結果:

原始數組:12 11 13 5 6 7 
排序后的數組:5 6 7 11 12 13 

以上就是使用 C 語言實現歸并排序的方法。

0
洪雅县| 镇赉县| 蛟河市| 峨山| 通道| 肥乡县| 正蓝旗| 康保县| 安多县| 唐河县| 藁城市| 鄯善县| 日照市| 汽车| 兴化市| 通渭县| 滨州市| 邢台县| 乐安县| 乌什县| 山阴县| 云霄县| 北海市| 延长县| 商南县| 黔西| 拉萨市| 镇坪县| 巴东县| 湖北省| 闸北区| 长子县| 瓮安县| 泗阳县| 宕昌县| 黄山市| 潞西市| 阳谷县| 尼木县| 敖汉旗| 江西省|