[問題] 合併排序如果要自己輸入
程式碼如下(可執行)
#define SIZE 3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void mergeSort(int array[],int length);
void sortSubArray(int array[],int low,int high);
void merge(int array[],int left,int middle1,int middle2,int right);
void displayElements(int array[],int length);
void displaySubArray(int Array[],int left,int right);
int main(void)
{
int array[SIZE];
int i;
srand(time(NULL));
for(i=0;i<SIZE;i++)
array[i]=rand()%90+10;
printf("Unsorted array:\n");
displayElements(array,SIZE);
printf("\n\n");
mergeSort(array,SIZE);
printf("Sorted array:\n");
displayElements(array,SIZE);
return 0;
}
void mergeSort(int array[],int length)
{
sortSubArray(array,0,length - 1);
}
void sortSubArray(int array[],int low,int high)
{
int middle1,middle2;
if( (high-low) >=1){
middle1=(low+high)/2;
middle2=middle1+1;
printf("split: ");
displaySubArray(array,low,high);
printf("\n ");
displaySubArray(array,low,middle1);
printf("\n ");
displaySubArray(array,middle2,high);
printf("\n\n");
sortSubArray(array,low,middle1);
sortSubArray(array,middle2,high);
merge(array,low,middle1,middle2,high);
}
}
void merge(int array[],int left,int middle1,int middle2,int right)
{
int leftIndex=left;
int rightIndex=middle2;
int combinedIndex=left;
int tempArray[SIZE];
int i;
printf("merge: ");
displaySubArray(array,left,middle1);
printf("\n ");
displaySubArray(array,middle2,right);
printf("\n");
while(leftIndex<=middle1 && rightIndex<= right){
if(array [leftIndex]<=array[rightIndex])
tempArray[combinedIndex++]=array[leftIndex++];
else
tempArray[combinedIndex++]=array[rightIndex++];
}
if(leftIndex==middle2){
while(rightIndex<=right)
tempArray[combinedIndex++]=array[rightIndex++];
}
else{
while(leftIndex<=middle1)
tempArray[combinedIndex++]=array[leftIndex++];
}
for(i=left;i<=right;i++)
array[i]=tempArray[i];
printf(" ");
displaySubArray(array,left,right);
printf("\n\n");
}
void displayElements(int array[],int length)
{
displaySubArray(array,0,length-1);
}
void displaySubArray(int array[],int left,int right)
{
int i;
for(i=0;i<left;i++)
printf(" ");
for(i=left;i<=right;i++)
printf(" %d",array[i]);
}
請問一下有沒有辦法 讓使用者自行輸入 要Merge Sort的數字
自己改來改去都有Bug
請C的高手 教一下@_@" 剛學C不久的初心者
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 119.77.204.203
→
04/19 20:32, , 1F
04/19 20:32, 1F
→
04/19 20:49, , 2F
04/19 20:49, 2F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
0
2
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章