#include
#include
#define NUM 101
static int S[NUM];
void Merge(int low, int mid, int high){
int i, j, k, index1, index2;
int U[NUM];
i=low; j=mid+1; k=low;
while(i<=mid && j<=high){
if(S[i] U[k]=S[i];
i++;
}
else{
U[k]=S[j];
j++;
}
k++;
}
if(i>mid){
index1=j; index2=k;
while(index1<=high){
U[index2]=S[index1];
index1++; index2++;
}
}
else{
index1=i; index2=k;
while(index1<=mid){
U[index2]=S[index1];
index1++; index2++;
}
for(index1=low;index1<=high; index1++){
S[index1]=U[index1];
}
}
}
void MergeSort(int low, int high){
int mid;
if(low mid=(low+high)/2;
MergeSort(low, mid);
MergeSort(mid+1, high);
Merge(low, mid, high);
}
}
void main(){
int i;
for(i=1; i S[i]=rand();
}
MergeSort(1, NUM-1);
for(i=1; i printf("%d ", S[i]);
}
}
소스는 이거고
결과는 나오는데 정렬을 하다 말아요...
급하고 졸린데 어디가 틀렸는지 모르게뜸니당
도와주세요!
(배열은 1부터 100까지예여..)
해결했습니다 휴;
#include <stdio.h>
#include <stdlib.h>
#define NUM 101
static int S[NUM];
void Merge(int low, int mid, int high){
int i=low; int j=mid+1; int k=low;
int x=0;
int U[NUM];
//값을 비교 후 작은 값을 U라는 temp배열에 넣습니당.
while(i<=mid && j<=high){
if(S[i]<S[j]) U[k++]=S[i++];
else U[k++]=S[j++];
}
//나머지 원소들을 U배열에 모두 넣어줘영.
if(i>mid) { while(k<=high) U[k++]=S[j++]; }
else { while(i<=mid) U[k++]=S[i++]; }
for(x=low; x<=high; x++) S[x]=U[x];
}
void MergeSort(int low, int high){
int mid;
if(low<high){
mid=(low+high)/2;
MergeSort(low, mid);
MergeSort(mid+1, high);
Merge(low, mid, high);
}
}
void main(){
int i;
for(i=1; i<NUM; i++){
S[i]=rand();
}
MergeSort(1, NUM-1);
for(i=1; i<NUM; i++){
printf("%d\t", S[i]);
}
puts("");
}