69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
void Merge(int a[], int p, int q, int r)
{
int lenl = q - p+1;
int lenr = r - q;
int i, j,k;
int *L = (int*)malloc(sizeof(lenl));
int *R = (int*)malloc(sizeof(lenr));
for (i = 0; i < lenl; i++) {
L[i] = a[p + i];
}
for (j = 0; j < lenr; j++) {
R[j] = a[q + 1 + j];
}
i = j = k = 0;
while (i < lenl && j < lenr) {
if (L[i]<R[j]) {
a[p + k++] = L[i++];
}
else {
a[p + k++] = R[j++];
}
}
while (i < lenl) {
a[p + k++] = L[i++];
}
while (j < lenr) {
a[p + k++] = R[j++];
}
free(L);
free(R);
}
void MergeSort(int a[], int p, int r)
{
if (p == r) {
return;
}
int mid = (p + r) / 2;
MergeSort(a, p, mid);
MergeSort(a, mid + 1, r);
Merge(a, p, mid, r);
}
int main(void)
{
int i;
int a[] = { 76,5,34,3,13,4,6,75 };
int last_index = sizeof(a) / sizeof(int) - 1;
MergeSort(a, 0, last_index);
for (i = 0; i <= last_index;i++) {
printf("%d\n", a[i]);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void Merge(int a[], int p, int q, int r)
{
int lenl = q - p+1;
int lenr = r - q;
int i, j,k;
int *L = (int*)malloc(sizeof(int)*lenl);
int *R = (int*)malloc(sizeof(int)*lenr);
for (i = 0; i < lenl; i++) {
L[i] = a[p + i];
}
for (j = 0; j < lenr; j++) {
R[j] = a[q + 1 + j];
}
i = j = k = 0;
while (i < lenl && j < lenr) {
if (L[i]<R[j]) {
a[p + k++] = L[i++];
}
else {
a[p + k++] = R[j++];
}
}
while (i < lenl) {
a[p + k++] = L[i++];
}
while (j < lenr) {
a[p + k++] = R[j++];
}
free(L);
free(R);
}
void MergeSort(int a[], int p, int r)
{
if (p == r) {
return;
}
int mid = (p + r) / 2;
MergeSort(a, p, mid);
MergeSort(a, mid + 1, r);
Merge(a, p, mid, r);
}
int main(void)
{
int i;
int a[] = { 76,5,34,3,13,4,6,75 };
int last_index = sizeof(a) / sizeof(int) - 1;
MergeSort(a, 0, last_index);
for (i = 0; i <= last_index;i++) {
printf("%d\n", a[i]);
}
return 0;
}