#include <stdio.h>
#include <stdlib.h>
void Marge(int *c, int left, int mid, int right){
int *d = (int *)malloc(sizeof(int)*(right - left + 1));
int x;
int k = 0;
int i = left, j = mid+1;
while (i < mid+1 && j <= right){
if (c[i] <= c[j]){
d[k] = c[i];
k = k++;
i = i++;
}
if (c[i] > c[j]){
d[k] = c[j];
k = k++;
j = j++;
}
}
while (j <= right){
d[k] = c[j];
k = k++;
j = j++;
}
while (i<=mid){
d[k] = c[i];
k = k++;
i = i++;
}
int y = left;
for (x = 0; x <k; x++){
c[y] = d[x];
y++;
}
}
void PaiArray(int *b, int left, int right){
if (left >= right) return;
else{
int mid = (left + right) / 2;
PaiArray(b, left, mid);//分成左边
PaiArray(b, mid+1, right);//分成右边
Marge(b, left, mid, right);//排序
}
}
int main(){
int a[8],i;
printf("请输入数组的值:");
for (i = 0; i < 8; i++){
scanf_s("%d", &a[i]);
}//输入数组
printf("我们要排列的数组为:");
for (i = 0; i < 8; i++){
printf("%d ",a[i]);
}//输出数组
PaiArray(a, 0, 7);
printf("我们得到的数组为:");
for (i = 0; i < 8; i++)
printf("%d ", a[i]);
return 0;
//5 2 1 4 3 6 9 8
#include <stdlib.h>
void Marge(int *c, int left, int mid, int right){
int *d = (int *)malloc(sizeof(int)*(right - left + 1));
int x;
int k = 0;
int i = left, j = mid+1;
while (i < mid+1 && j <= right){
if (c[i] <= c[j]){
d[k] = c[i];
k = k++;
i = i++;
}
if (c[i] > c[j]){
d[k] = c[j];
k = k++;
j = j++;
}
}
while (j <= right){
d[k] = c[j];
k = k++;
j = j++;
}
while (i<=mid){
d[k] = c[i];
k = k++;
i = i++;
}
int y = left;
for (x = 0; x <k; x++){
c[y] = d[x];
y++;
}
}
void PaiArray(int *b, int left, int right){
if (left >= right) return;
else{
int mid = (left + right) / 2;
PaiArray(b, left, mid);//分成左边
PaiArray(b, mid+1, right);//分成右边
Marge(b, left, mid, right);//排序
}
}
int main(){
int a[8],i;
printf("请输入数组的值:");
for (i = 0; i < 8; i++){
scanf_s("%d", &a[i]);
}//输入数组
printf("我们要排列的数组为:");
for (i = 0; i < 8; i++){
printf("%d ",a[i]);
}//输出数组
PaiArray(a, 0, 7);
printf("我们得到的数组为:");
for (i = 0; i < 8; i++)
printf("%d ", a[i]);
return 0;
}