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

溫馨提示×

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
惠州市| 电白县| 绍兴县| 锡林浩特市| 图片| 疏勒县| 孝感市| 汉阴县| 资讯| 防城港市| 广西| 灌云县| 天全县| 博客| 大连市| 沭阳县| 清新县| 云南省| 正宁县| 金阳县| 大英县| 马关县| 汕尾市| 鹿邑县| 漳浦县| 阜南县| 青田县| 布尔津县| 册亨县| 汕头市| 莒南县| 中阳县| 古浪县| 凤阳县| 都兰县| 贞丰县| 沧州市| 桑日县| 黑龙江省| 麻江县| 吐鲁番市|