归并排序

原创 2012年03月30日 09:58:41
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#define MAXSIZE 100
#define ARRAYSIZE 8
void mergeSort(int*, int);
void _mergeSort(int*, int, int);
//合并
void merge(int*, int, int, int);
//复制
void copy(int*, int*, int, int);
int main(void)
{
    int i;
    int array[ARRAYSIZE]= {666, -1023, 68, 2 ,1000, 999, 9, -999};
    mergeSort(array, ARRAYSIZE);
    for (i = 0; i < ARRAYSIZE; ++i)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
    return 0;
}
void mergeSort(int *array, int length)
{
    if (NULL == array || 0 == length)
    {
        return ;
    }
    _mergeSort(array, 0, length - 1);
}
void _mergeSort(int *array, int begin, int end)
{
    if (begin >= end)
    {
        return ;
    }
    int middle = begin + ((end - begin) >> 1);
    _mergeSort(array, begin, middle);
    _mergeSort(array, middle + 1, end);
    merge(array, begin, middle, end);
}
//将a[begin, middle]和a[middle + 1, end]归并
void merge(int *array, int start, int middle, int end)
{
    int length = end - start + 1;
    int b[length];
    memset(b, 0, sizeof(int) * length);
    int left = start;
    int right = middle + 1;
    int all = 0;
    while(right <= end && left <= middle)
    {
        if(array[left] < array[right])
        {
            b[all] = array[left];
            ++left;
        }
        else
        {
            b[all] = array[right];
            right ++;
        }
        ++all;
    }
    /* move the left data */
    if(left <= middle)
    {
        memmove(&b[all], &array[left], sizeof(int) * (middle - left + 1));
    }
    if(right <= end)
    {
        memmove(&b[all], &array[right], sizeof(int) * (end - right + 1));
    }
    memmove(&array[start], b, sizeof(int) * length);
    /*
    all = 0;
    for (i = start; i <= end; ++i)
    {
        array[i] = b[all];
        ++all;
    }
    */
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构归并排序问题

二路归并排序

  • 2015-06-06 23:21
  • 38KB
  • 下载

归并排序之数组和链表

归并排序之数组与链表

归并排序算法

归并排序算法代码实现

归并排序的实现与讨论

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列...

归并排序动画可运行jar

  • 2013-04-27 18:45
  • 11KB
  • 下载

归并排序

/****归并排序吧数组拆成单个,然后在进行排序合并*/ public class MergeSortClass { private int[] SortOut; public void pri...
  • fhlkm
  • fhlkm
  • 2013-06-14 15:28
  • 427
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)