修改归并排序除了问题,帮忙解决一下

来源:百度知道 编辑:UC知道 时间:2024/09/21 08:25:36
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
#define LEN 10
int bre_value ( int n, int cnt, int cnt_len[]);
void merge( int a[], int b[], int c[], int m, int n);
void merge_sort (int key[], int n);
void pri_fomt( int after_sort[]);

int main(){
int length, i, j, cnt, sum = 0;
int cnt_len[10] = { 0 };
int *k, *m;
printf("please input the length you input: ");
scanf ("%d", &length);

k = (int *)calloc(length, sizeof(int));
printf("Please input the values to start the sorting:\n");
for(i = 0; i < length; i++)
k[i] = scanf("%d");

cnt = bre_value(length, 0, cnt_len);
for(i = 0; i < cnt; i++)
for(j = 0; j < length; j += cnt_len[i])
merge_sort (k + j, cnt_len[i]);
for(i = 0; i < cnt; i++){
sum += cnt_len[i];
m = (int *)calloc(sum + cnt_len[i+1], sizeof(

你的错误太多了。不仅函数Merge, MSort,和MergeSort都有错。另外一个很典型的错误就是传给MergeSort的参数要是&List才行,因为你要改变它里面的内容,如果你只传List进去,相当于传了一个List的复制品进去,结果你的MergeSort并没有改变原来那个List,改变的只是它的复制品。改好的程序如下:

#include<stdio.h>

#define MAXNUM 20
#define TRUE 1
#define FALSE 0

typedef int KeyType;

typedef struct {
KeyType key;
} RedType;

typedef struct {
int n;
RedType record[MAXNUM];
} SqList;

RedType TR[MAXNUM];

void Merge(RedType SR[], int i, int m, int n)
{
int j, k;

for ( j = m + 1, k = i; i <= m && j <= n; ++k ) {
if (SR[i].key <= SR[j].key)
TR[k] = SR[i++];
else
TR[k] = SR[j++];
}
while (i <= m)
TR[k++] = SR[i++];
while (j <= n)
TR[k++] = SR[j++];
for ( i = 0; i <= n; i++ )
SR[i] = TR[i];

这么难的问题为何不给200分呢,我纳闷了饿
~