質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

931閲覧

C言語のマージソートについて

Tinasp

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/02/05 11:03

マージソートのプログラムについてなんですが、うまくいきません。ランダムな値が代入されます。いろいろなサイトを参考にしましたが、そんなにおかしなところは無いと思います。。
どうかご教授お願いします。

#include <stdio.h> #include<stdlib.h> #include <unistd.h> #include <omp.h> #include<time.h> #include<sys/time.h> #include<pthread.h> const int data_num = 20; struct Data{ int *array; }; void merge_div (int *array,int start, int end) { if(start < end){ int mid = (start+end)/2; merge_div(array,start,mid); merge_div(array,mid+1,end); int work[20]; int i,j,k; for(i = start; i <= mid; i++){ work[i] = array[i]; } for(i = mid+1,j = end; i <= end; i++,j--){ work[i] = array[j]; } printf("\n"); printf("workデバック\n"); for(int l = 0; l <= end; l++){ printf("%d ",work[l]); } i = start; j = end; for(k = 0; k <= end; k++){ if(work[i] <= work[j]){ array[k] = work[i]; i++; }else{ array[k] = work[j]; j--; } } } void Shuffle(int *array, int n) { int i,j,t; srand(1); for (i = 0; i < n; i++) { j = rand() % n; t = array[i]; array[i] = array[j]; array[j] = t; } } void ShowData(int *array, int n) { while (n--) printf("%d ", *array++); printf("\n"); } int main (void) { int i; struct timeval time_start, time_end,start,end; struct Data data; data.array = NULL; data.array = (int *)malloc(sizeof(int)*data_num); for(i=0; i<data_num; i++){ data.array[i]=i; } Shuffle(data.array, data_num); ShowData(data.array,data_num); gettimeofday(&time_start, NULL); merge_div(data.array,0,19); gettimeofday(&time_end, NULL); printf("\n"); ShowData(data.array,data_num); printf("Serialtime = %.3lf ms\n", ((time_end.tv_sec - time_start.tv_sec) + (time_end.tv_usec - time_start.tv_usec)*1.0E-6)*1000); free(data.array); return 0; }

実行結果例

//ソート前 3 2 17 1 4 11 18 0 14 5 9 15 7 6 12 16 19 8 13 10 ソート後 15 14 27 27 14 15 0 0 6618264 0 0 17 20 0 6618304 0 17 20 0 6618304

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

diff

1 printf("workデバック\n"); 2- for(int l = 0; l <= end; l++){ 3+ for(int l = start; l <= end; l++){ 4 printf("%d ",work[l]); 5 } 6 7 i = start; j = end; 8- for(k = 0; k <= end; k++){ 9+ for(k = start; k <= end; k++){ 10 if(work[i] <= work[j]){ 11 array[k] = work[i]; 12 i++; 13 }else{ 14 array[k] = work[j]; 15 j--; 16 } 17 } 18+ } 19 }

投稿2021/02/05 11:40

actorbug

総合スコア2431

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tinasp

2021/02/05 11:59

本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問