-
intindexA = 0; intindexB=0; int[] C = new int[indexA.length+B.length]; intindexC=0; while(indexA<A.length&&indexB<B.length){ if(A[indexA]<B[indexB]){ C[indexC++]= A[indexA++]; }else{ C[indexC++] =B[indexB++]; } while(indexA<A.length){ C[indexC++]=A[indexA++]; } while(indexB<B.length){ C[indexC++] = B[indexB++]; } }
#include<iostream>
#include<algorithm>
using namespace std;
#define N 10
void merge(int num[], int start, int middle, int end)
{
if (start >= end)return;
else {
int lowbegin = start;
int lowhigh = middle;
int upbegin = middle + 1;
int uphigh = end;
int i = 0;
int n = end - start + 1;
while (lowbegin <= lowhigh && upbegin <= uphigh)
{
if (num[lowbegin] < num[upbegin])
num[i++] = num[lowbegin++];
else
num[i++] = num[upbegin++];
}
if (lowbegin < lowhigh)num[i++] = num[lowbegin++];
else
num[i++] = num[upbegin++];
}
}
void merge_sort(int num[], int start, int end)
{
if (start == end)return;
else {
int middle = (start + end - 1) / 2;
merge_sort(num, start, middle);
merge_sort(num, middle, end);
merge(num, start, middle, end);
}
}
int main()
{
int num[N];
for (int i = 1; i <= N; i++)
scanf_s("%d", &num[i]);
//printf("\n");
merge_sort(num, 1, 10);
for (int i = 1; i <= N; i++)
cout << num[i] << " ";
cout << endl;
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#define N 10
#define MAX 10000
void merge(int num[], int p, int q, int r);
void merge_sort(int num[], int p, int r);
int main(void) {
int num[N] ,i;
printf("Please input %d numbers to sort(less than %d):\n", N, MAX);
for (i = 0; i < N; i++)
scanf_s("%d", &num[i]);
merge_sort(num, 0, N - 1);
for (i = 0; i < N; i++)
printf("%d ", num[i]);
printf("\n");
//system("pause");
return 0;
}
void merge(int num[], int p, int q, int r) {
int n1, n2, L[N], R[N], i, j, k;
// L means left and R means right
n1 = q - p + 1;
n2 = r - q;
for (i = 0; i < n1; i++)
L[i] = num[p + i];
for (i = 0; i < n2; i++)
R[i] = num[q + i + 1];
L[n1] = MAX;//哨兵
R[n2] = MAX;
i = 0;
j = 0;
for (k = p; k <= r; k++) {
if (L[i] <= R[j]) {
num[k] = L[i];
i++;
}
else {
num[k] = R[j];
j++;
}
}
}
void merge_sort(int num[], int p, int r) {
int q;
if (p < r) {
q = (p + r) / 2;
merge_sort(num, p, q);//分开
merge_sort(num, q + 1, r);
merge(num, p, q, r);
}
}