[問題] 合併排序如果要自己輸入

看板C_and_CPP (C/C++)作者 (幻境)時間15年前 (2011/04/19 20:16), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/2 (看更多)
程式碼如下(可執行) #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
你要不要順便把你有bug的code貼上來看一下?
04/19 20:32, 1F

04/19 20:49, , 2F
請善用置底文網址貼 code
04/19 20:49, 2F
文章代碼(AID): #1DhNqh3j (C_and_CPP)
文章代碼(AID): #1DhNqh3j (C_and_CPP)