排序算法<2>归并排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdn_kou/article/details/82459010

文章没有解释和代码注释,代码经改进,做成了好理解,关键是好记忆的方式进行书写。用于自己进行查阅

#include <stdio.h>
#include <string.h>

void merge(int arr1[],int left ,int mid ,int right)
{
    int arr2[8];
    int i = left ;
    int j = mid + 1;

    int t = 0;

    while( i <= mid && j <= right ){
        if(arr1[i] < arr1[j]){
            arr2[t++] = arr1[i++];
        }else
        {
            arr2[t++] = arr1[j++];
        }
    }

    while( i <= mid ){
        arr2[t++] = arr1[i++];
    }

    while( j <= right){
        arr2[t++] = arr1[j++];
    }

    t = 0;
    while(left <= right){
        arr1[left++]= arr2[t++];
    }
}

void sort(int arr1[],int left ,int right)
{
    if ( left < right ){
        int mid = (left + right)/2;
        sort(arr1,left,mid );
        sort(arr1,mid + 1,right);
        merge(arr1,left ,mid ,right);
    }
}

int main()
{
    int arr1[8] = {9,2,5,1,6,4,3,7 };

    sort(arr1,0,7);
    int i = 0;
    for(;i < 8; i++){
        printf("%d ",arr1[i]);
    }

    printf("\n");
    return 0;
}

看不懂,过来找我,当面解释,三两句就说完了

猜你喜欢

转载自blog.csdn.net/csdn_kou/article/details/82459010