归并排序

原创 2013年12月01日 23:21:53
#define SORT_H_INCLUDED

#define  MAXSIZE  1000

typedef struct
{
    int  R[MAXSIZE];
    int  length;
} sqlist;
typedef  sqlist  *Sqlist;


void  mergesort(Sqlist  L);
void  msort(int s[],int t[],int i,int j); /**< 递归实现归并函数 */
void  Merge(int s[],int t[],int i,int j,int k); /**< 合并函数 */


#endif // SORT_H_INCLUDED
#include  <stdio.h>
#include  <malloc.h>
#include  "sort.h"

void  Merge(int  SR[],int TR[],int i,int m,int n)
{
    int  j,k,l;

    for(j=m+1,k=i;i<=m && j<=n; k++)/**< 判断语句如为 k<=m && j<=n; 将会出错,中间两个数值将无法归并 */
    {
        if(SR[i] <=SR[j])
            TR[k]=SR[i++];
         else
            TR[k]=SR[j++];
    }

    if(i <=m)
    {
        for( ;i<=m;)
            TR[k++]=SR[i++];
    }


    if(j<=n)
    {
        for( ;j<=n;)
            TR[k++]=SR[j++];
    }

}

void  msort(int SR[],int TR1[],int s,int t)
{
    int  m;
    int  TR2[MAXSIZE];

    if(s==t)
        TR1[s]=SR[s];
    else
    {
        m=(s+t)/2;
        msort(SR,TR2,s,m);
        msort(SR,TR2,m+1,t);
        Merge(TR2,TR1,s,m,t);
    }

}

void  mergesort(Sqlist  L)
{
    msort(L->R,L->R,0,L->length-1);
}






#include <stdio.h>
#include <stdlib.h>
#include  "sort.c"

int main()
{
    int  i;
    int  d[10]={50,30,21,44,76,52,78,42,88,90};
    Sqlist  L=(Sqlist )malloc(sizeof(sqlist));

    L->length=10;
    for(i=0;i <10;i++)
    {

        L->R[i]=d[i];
    }

   mergesort(  L);
   for(i=0;i <10;i++)
        printf("%d\t",L->R[i]);

     getchar() ;


    return 0;
}


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

相关文章推荐

数据结构归并排序问题

二路归并排序

  • 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
  • 430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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