| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 278 人关注过本帖
标题:求助,内排序归并函数实现不了
只看楼主 加入收藏
MapleCaesar
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-25
收藏
 问题点数:0 回复次数:0 
求助,内排序归并函数实现不了
sort1.zip (529.83 KB)

其他三个能行,就归并函数实现不了,跪求解决方法~
main.ccp文件
#include<stdio.h>
#include<time.h>
#include<dos.h>
#include  "conio.h"
#include  "malloc.h"
#include  "string.h"
#include  "stdlib.h"
#include "i.h"
#include "q.h"
#include "r.h"
#include "m.h"
#define MAX 10000


void main()
{
  int N; int *a; time_t start ,end;
  double usetime;
  int i,j,key=1;
  while(key!=0)
  {
  printf(" *********各种内排序的实现及比较********\n");
  printf("|\t1----------插 入 排 序\t\t|\n");
  printf("|\t2----------快 速 排 序\t\t|\n");
  printf("|\t3----------基 数 排 序\t\t|\n");
  printf("|\t4----------归 并 排 序\t\t|\n");
  printf(" ***************************************\n");
  printf("请选择排序方法:\n ");
  scanf("%d",&i);  
   if(i==1)
     printf("\n--------------------插 入 排 序--------------------\n");
   else if(i==2)
     printf("\n--------------------快 速 排 序--------------------\n");
   else if(i==3)
     printf("\n--------------------基 数 排 序 -------------------\n");
   else if(i==4)
     printf("\n--------------------归 并 排 序 -------------------\n");
   
   if(i==3)
      a=(int *)malloc((N+2)*sizeof(int));  
   else if(i==4)
      a=(int *)malloc((N+1)*sizeof(int));
   else
      a=(int *)malloc(N*sizeof(int));
   if(!a)
      exit(1);
   
   printf("输入随机数组长度N:\n");
   scanf("%d",&N);
   printf("排序的结果为:\n");
      
   srand(time(NULL)); /*随机数发生器的初始化函数*//*if(i==4) for(j=0;j<N;j++) a[j]=rand()%1000; else*/
     for(j=0;j<N;j++)
       a[j]=rand()%2000;//控制随机数在2000以内
   
   start=clock(); /*开始*/
   if(i==1)
   {
     InsertSort(a,N);
     for(j=0;j<N;j++)
     printf("%d\t",a[j]);
   }
   else if(i==2)
   {
    QuickSort(a,0,N-1);
    for(j=0;j<N;j++)
    printf("%d\t",a[j]);
   }
   else if(i==3)
   {
    for(j=N-1;j>=0;j--)
    a[j+1]=a[j];
    a[0]=0;
    RadixSort(a,N);
   }
   else if(i==4)
   {
    for(j=N-1;j>=0;j--)
    a[j+1]=a[j];
    a[0]=0;
    MergeSort(a,N);
    for(j=1;j<N+1;j++)
    printf("%d\t",a[j]);
   }
  end=clock(); /*结束*/
  
  usetime=(end-start)*1.0/CLOCKS_PER_SEC;  /*使用时间的计算*/
  printf("\n该排序所花的时间为:");
  printf("%lf 秒\n",usetime);
  putchar('\n'); free(a); i++;
  }
  getch();  
}
归并.h文件
void merge(int r[],int h,int m,int w,int t[]);
void tgb(int s,int n,int r[],int t[]);
void MergeSort(int a[],int n)
  {
     int i,s=1;
     int t[10000]={0};
     while(s<n)
   {
      tgb(s,n,a,t);      
      s*=2;
      if(s<n)
      {
       tgb(s,n,t,a);
       s*=2;
       }
      else
      {
        i=1;
        while(i<=n)
        a[i]=t[i++];
      }
    }
 }
 
void tgb(int s,int n,int r[],int t[])
    {
      int i=1;
      while(i<=(n/2-s+1))
        {
          merge(r,i,i+s-1,i+2*s-1,t);
          i=i+2*s;
        }
      if(i<(n-s+1))
      merge(r,i,i+s-1,n,t);
      else
      while(i<=n) t[i]=r[i++];
    }

 void merge(int r[],int h,int m,int w,int t[])
   {
     int i,j,k;
     i=h; j=m+1; k=h-1;
     while(i<=m&&m<=w)
      {
        k++;
        if(r[i]<=r[j])
           t[k]=r[i++];
        else
           t[k]=r[j++];
      }
        if(i>m)
        {
          while(j<=w)
          t[++k]=r[j++];
        }
        else
        {
         while(i<=m)
         t[++k]=r[i++];
        }
 }


[ 本帖最后由 MapleCaesar 于 2011-6-25 10:34 编辑 ]
搜索更多相关主题的帖子: double 其他 include start 
2011-06-25 10:14
快速回复:求助,内排序归并函数实现不了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049525 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved