[問題] 請教mergesort

看板C_and_CPP (C/C++)作者 (撐..)時間16年前 (2010/04/29 19:34), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) compile沒有錯誤,但輸出畫面只有 請按任意鍵繼續..... 希望得到的正確結果: 將陣列中四個數,由小到大排列 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 有問題的code: (請善用置底文標色功能) #include "stdafx.h" #include <iostream> #define max 4 //定義陣列大小 using namespace std; int mergesort(int s[], int low, int high); void merge( int s[], int low, int mid, int high); int main(int low, int high){ int s[]={4,3,2,1}; low=0, high=3; printf("\n排序前:"); for (int i=0; i<=3; i++) printf("%d", s[i]); mergesort( s, low, high); printf("\n排序後:"); for (int i=0; i<=3; i++) printf("%d",s[i]); return 0; } int mergesort(int s[], int low, int high){ int mid=0; if(low < high){ mid=max/2; mergesort(s, low, mid-1); mergesort(s,mid, high); } else{ merge(s, low, mid, high); } return 0; } void merge( int s[], int low, int mid, int high){ int i, j, k; int u[]={0}; //暫存陣列 i=low; j=mid+1; k=0; while( i<=mid+1 && j<=high){ if (s[i] < s[j]){ u[k]=s[i]; i++; } else{ u[k]=s[j]; j++; } k++; } if (i > mid){ u[k]=s[j]; j++; k++; } else{ u[k]=s[i]; i++; k++; } for (k=0,i=0; k<=high;k++,i++) s[i]=u[k]; } 補充說明: 請教一下,是小弟對程式的邏輯錯了或是程式碼的部份寫錯,還是兩個都錯0rz -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.97.69

04/29 19:35, , 1F
#include <stdio.h> ??
04/29 19:35, 1F

04/29 19:36, , 2F
請善用 debugger 來找錯誤
04/29 19:36, 2F

04/29 19:54, , 3F
int u[]={0}; 暫存陣列根本不夠大, 不曉得為啥你陣列
04/29 19:54, 3F

04/29 19:54, , 4F
都不寫維度的...
04/29 19:54, 4F

04/30 17:37, , 5F
u[]爆炸了~
04/30 17:37, 5F
文章代碼(AID): #1BsMws9B (C_and_CPP)
文章代碼(AID): #1BsMws9B (C_and_CPP)