レポートに関してのプログラムを知りたいです
〔課題〕
入出力配列を引数とする再帰的手続きを作成しマージソートを実現せよ。ただし、各入力要素X[i]は整数値をとるものとする。関数として(i)長さnの配列Xをマージソートによって小さい順に並べ変えた配列Yを求めるmsort(int X[], int n , int Y[]),(ii)すでに並べ替えられている長さn1の配列Y1と長さn2の配列Y2を併合した配列Yを求めるmerge(int Y1[], int n1, int Y2[] int n2, int Y[]),(iii)長さnの配列Xの各要素のアドレス並びに内容を表示するshow_addr(int X[], int n)とshow(int X[], int n)を用意すること。
<プログラム(show_addr,main,msort(一部))の作成例>
C
1#include<stdio.h> 2#include<math.h> 3#define Tw(n) (int)((n)*ceil(log(n)/log(2))-pow(2,ceil(log(n)/log(2)))+1) 4 5#define N 8 6#int cnt = 0; 7 8void msort(),merge(),show_addr(),show(); 9 10void show_addr(int Z[], int n) 11{ 12 int i; 13 for(i=0; i<n; i++) printf("%x",&Z[i]); 14 printf("\n"); 15} 16 17main() 18{ 19 int X[N] = {18, 37, 21, 14, 7, 12, 19, 6}; 20 int Y[N]; 21 show_addr(X,N); show_addr(Y,N); 22 show(X,N); 23 msort(X,N,Y); 24 show(Y,N); 25 printf("cnt=%d: Tw(%d)=%d\n", cnt, N , Tw(N)); 26} 27 28void msort(int X[], int n, int Y[]) 29{ 30 int n1=n/2,n2=n-n1,i; 31 int X1[n1],X2[n2],Y1[n1],Y2[n2]; 32 show_addr(X1,n1); show_addr(X2,n2); show_addr(Y1,n1); show_addr(Y2,n2); 33 ...(続く
回答1件
あなたの回答
tips
プレビュー