归并排序学习

**归并排序代码** 

//mergeSort
#include<stdio.h>
#include<stdlib.h>
//合并
void merge_Sort(int arr[], int L, int M, int R)
{
    int left_size = M - L;
    int right_size = R - M+1;
    int* left = (int*)malloc(sizeof(int) * left_size);
    int* right = (int*)malloc(sizeof(int) * right_size);
    for (int i = L; i < M; i++)
    {
        left[i - L] = arr[i];
    }
    for (int i = M;i <= R; i++)
    {
        right[i - M] = arr[i];
    }


    //合并
    int i = 0, j = 0, k = L;
    while (i < left_size && j < right_size)
    {
        if (left[i] < right[j])
        {
            arr[k] = left[i];
            k++;
            i++;
        }
        else
        {
            arr[k] = right[j];
            k++;
            j++;
        }
    }
    while (i < left_size)
    {
        arr[k] = left[i];
        k++;
        i++;
    }
    while (j < right_size)
    {
        arr[k] = right[j];
        k++;
        j++;
    }
}

//分而治之
void MergeSort(int arr[], int L, int R)
{
    if (L == R)
        return;
    else
    { 
        int M = (L + R) / 2;
        MergeSort(arr, L, M);
        MergeSort(arr, M + 1, R);
        merge_Sort(arr, L, M + 1, R);
    }

}

//输出数组
void display(int arr[],int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
}
//主函数
int main(void)
{
    int num[] = {6,8,10,9,4,5,2,7 };
    int L = 0;
    int R = 7;
    MergeSort(num, L, R);
    for (int i = 0; i <= 7; i++)
        printf("%d ", num[i]);
}

 

posted @ 2020-12-08 20:27  loliconsk  阅读(38)  评论(0)    收藏  举报