マージソートのプログラムについてなんですが、うまくいきません。ランダムな値が代入されます。いろいろなサイトを参考にしましたが、そんなにおかしなところは無いと思います。。
どうかご教授お願いします。
#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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/05 11:59