查看單個文章
舊 2010-04-06, 09:21 PM   #2 (permalink)
pedrowong 帥哥
註冊會員
 
pedrowong 的頭像
榮譽勳章
UID - 312366
在線等級: 級別:13 | 在線時長:250小時 | 升級還需:2小時級別:13 | 在線時長:250小時 | 升級還需:2小時級別:13 | 在線時長:250小時 | 升級還需:2小時
註冊日期: 2008-10-25
住址: 台北
文章: 94
精華: 0
現金: 207 金幣
資產: 367 金幣
預設 剔除錯誤描述結果如下

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 8; //暫設大小為8

void merge(int *data[], int length);
void mergesort(int *data[], int left, int mid, int right);

void main(void)
{
int data[] = {5,1,7,50,10,4,80,33};
int i = 0;
int length = SIZE;

srand(time(NULL));

printf("陣列大小:%d \n", length);
printf("原陣列:");
for(i = 0; i < length; i ++){//亂數產生放入陣列中
//data[i] = rand();
printf("%d ", data[i]);
}

merge(&data, length);
printf("\n排列後之陣列:");
for(i = 0; i < length; i ++){
printf("%d ", data[i]);
}
system("pause");
return;
}



void merge(int *data[], int length)
{
int count = 0, size = 1;//分割用
int left = 0, right = 0, mid = 0; //指標用

while(count < 5){
while(1){
mid = (left + size)-1;
right = (mid + size);
if(length <= right){
right = length - 1;
if(right <= mid){break;}
}

mergesort(data, left, mid, right);
left = right + 1;
printf("\n%d %d", right, mid);
}
count += 1;
size *= 2;
}

}

void mergesort(int *data[], int left, int mid, int right)
{
int temp[8];
int i = 0, j = left, k = left;

while(j<=mid){
temp[i] = data[j];
i++;
j++;
}
i = 0;
while(j <= right){
if(temp[i] <= data[j]){
data[k] = temp[i];
k ++;
i ++;
}else{
data[k] = data[j];
k ++;
j ++;
}
}
while (k < j){
data[k] = temp[i];
k = k+1; i = i+1;
}
}
pedrowong 目前離線  
送花文章: 4, 收花文章: 84 篇, 收花: 193 次
回覆時引用此帖