归并排序

原创 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;
    }
    */
}

算法基础6:堆排序算法

参考《算法导论》P84~P90#include #include #define MAXSIZE 100 void heapSort(int a[], int heapSize); // 堆排序 ...
  • Artprog
  • Artprog
  • 2017年03月19日 14:06
  • 237

数据结构归并排序问题

  • 2017年07月17日 20:23
  • 3KB
  • 下载

二路归并排序

  • 2015年06月06日 23:21
  • 38KB
  • 下载

poj2299&&归并排序

#include #include //error: reference to 'left' is ambiguous|把left换成left_就好了 using namespace std; c...

递归归并排序算法

  • 2017年11月02日 22:33
  • 2KB
  • 下载

归并排序算法

  • 2013年10月27日 09:56
  • 5KB
  • 下载

第十五周项目一(7)——归并排序

*Copyright(c)2017,烟台大学计算机与控制工程学院 *All rights reservrd. ...

归并排序算法代码实现

  • 2012年11月15日 19:20
  • 2KB
  • 下载

归并排序(C++语言描述)

  • 2013年11月09日 15:54
  • 1KB
  • 下载

数组和链表的归并排序算法实现(C语言)

数组和链表的归并排序算法实现(C语言)
  • zwhlxl
  • zwhlxl
  • 2015年03月05日 21:11
  • 2717
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:归并排序
举报原因:
原因补充:

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