[問題] merge sort
開發平台(Platform): (Ex: Win10, Linux, ...)
win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
code::block
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
不清楚XD
問題(Question):
先抱歉程式有點冗長不好看,非資工系,最近開始看資結寫C
寫merge sort,跑出來結果與預期不同
不確定是邏輯與觀念錯誤,還是code寫法的問題
餵入的資料(Input):
int numbers[SIZE]={4,15,16,50,8,43,42,108};
預期的正確結果(Expected Output):
{4,8,15,16,42,43,50,108}
錯誤結果(Wrong Output):
{4,15,16,50,8,43,42,108} 跟輸入一樣沒變
i,j,k那邊改成
int i=0;
int j=0;
int k=0;
又會跑出不同的結果
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
#include <stdio.h>
#include <stdlib.h>
#define SIZE 8
int merge(int L[],int R[],int A[]){
int i=0;
int j=0;
int k=0;
while( i<sizeof(L)/sizeof(L[0]) && j<sizeof(R)/sizeof(R[0])){
if(L[i] <= R[j]){
A[k] = L[i];
i++;
}
else{
A[k] = R[j];
j++;
}
k++;
}
while(i<sizeof(L)/sizeof(L[0])){
A[k]=L[i];
i++;
k++;
}
while(j<sizeof(R)/sizeof(R[0])){
A[k]=R[j];
j++;
k++;
}
}
int merge_sort(int array[],int n){
if (n < 2){
return;
}
int mid = n/2;
int left[mid];
int right[n-mid];
for (int i = 0; i < mid-1; i++){
left[i] = array[i];
}
for (int i = mid; i < n-1; i++){
right[i-mid] = array[i];
}
merge_sort(left,mid);
merge_sort(right,n-mid);
merge(left,right,array);
}
int main(void)
{
int numbers[SIZE]={4,15,16,50,8,43,42,108};
printf("\n");
for (int i = 0; i < SIZE; i++){
printf("%i ",numbers[i]);
}
printf("\n");
merge_sort(numbers,SIZE);
for (int i = 0; i < SIZE; i++){
printf("%i ",numbers[i]);
}
printf("\n");
}
補充說明(Supplement):
無
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.149.180
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1540222486.A.CC2.html
→
10/23 00:28,
5年前
, 1F
10/23 00:28, 1F
→
10/23 00:29,
5年前
, 2F
10/23 00:29, 2F
推
10/23 01:38,
5年前
, 3F
10/23 01:38, 3F
→
10/23 01:38,
5年前
, 4F
10/23 01:38, 4F
→
10/23 01:38,
5年前
, 5F
10/23 01:38, 5F
→
10/23 01:40,
5年前
, 6F
10/23 01:40, 6F
→
10/23 01:40,
5年前
, 7F
10/23 01:40, 7F
瞭解了 謝謝!
※ 編輯: wavek (1.160.149.180), 10/23/2018 21:26:26
討論串 (同標題文章)