[問題] 請教mergesort
( *[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
04/29 19:35, 1F
→
04/29 19:36, , 2F
04/29 19:36, 2F
推
04/29 19:54, , 3F
04/29 19:54, 3F
→
04/29 19:54, , 4F
04/29 19:54, 4F
推
04/30 17:37, , 5F
04/30 17:37, 5F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章