100分求做一个数据结构习题

2025-05-16 10:46:36
推荐回答(1个)
回答(1):

#include
#include
typedef int MYTYPE;

void Merge(MYTYPE x[], MYTYPE tmp[], int lpos, int rpos, int rightend){
int leftend= rpos - 1,
numelements = rightend - lpos + 1,
tmppos= lpos,i;

while ((lpos <= leftend) && (rpos <= rightend))
tmp[tmppos++] = x[lpos] <= x[rpos] ? x[lpos++] : x[rpos++];

while (lpos <= leftend) tmp[tmppos++] = x[lpos++];
while (rpos <= rightend)tmp[tmppos++] = x[rpos++];

for (i = 0; i < numelements; ++i, --rightend) x[rightend] = tmp[rightend];
}

void MSort(MYTYPE x[], MYTYPE tmp[], int left, int right){
if (left >= right) return;

int center = (left + right) / 2;
MSort(x, tmp, left, center);
MSort(x, tmp, center + 1, right);
Merge(x, tmp, left, center + 1, right);
}

void MergeSort(MYTYPE x[], int n){
MYTYPE *tmp = (MYTYPE*)malloc(n*sizeof(MYTYPE));

MSort(x, tmp, 0, n - 1);
free(tmp);
}
void main() {
int ar[10],i;
for(i=0;i<10;++i){
printf("输入第%d个数:",i+1);
scanf("%d",&ar[i]);
}
for(i=0;i<10;++i) printf("%d,",ar[i]);
MergeSort(ar,10);
printf("\n排序后:\n");
for(i=0;i<10;++i) printf("%d,",ar[i]);
printf("\n");
}算法转自<数据结构与算法分析学习笔记>,代码也可以编译,我测试了下
你看下有没帮助吧
为什么 孤傲※王子 这种贴海报刷分的人有存在这个世界的必要呢?我真是不理解上帝的用意,是来告知人世的悲哀,还是想为一个常人作点衬托呢?