0
点赞
收藏
分享

微信扫一扫

归并排序的一个C语言实现案例

忆北文学摄影爱好员 2022-04-22 阅读 34
算法
#include <stdio.h>
#define MAX_LENGHT 20

void printArr(int arr[], int length) {
    for (int i = 0; i < length; i++) {
        printf("%d ",arr[i]);
    }
    printf("\n");
}

void merge(int arr[],int start,int mid,int end) {
    //临时数组
    int tempArr[MAX_LENGHT];
    int i = start;
    int j = mid+1;
    int k = 0;
    while ((i <= mid)&&(j<=end)){
        if (arr[i] < arr[j]) {
            tempArr[k++] = arr[i++];
        } else {
            tempArr[k++] = arr[j++];
        }
    }
    //将剩余部分填充
    while (i <= mid) {
        tempArr[k++] = arr[i++];
    }

    while (j <= end) {
        tempArr[k++] = arr[j++];
    }
    //将临时数组数据写回,注意,容易出错的地方
    for (j = 0, i = start; j < k; i++, j++) {
        arr[i] = tempArr[j];
    }

    return;
}

void mergeSort(int arr[],int start,int end) {
    if (start >= end) {
        return;
    }

    int mid = (start + end) / 2;
    mergeSort(arr, start, mid);
    mergeSort(arr, mid + 1, end);
    merge(arr, start, mid, end);
}
int main()
{
    int arr[] = { 4, 7, 6, 5, 2, 1, 8, 2, 9, 1 };
    int length = sizeof(arr) / sizeof(int);
    mergeSort(arr,0,length - 1);
    printArr(arr,length);
}
举报

相关推荐

0 条评论