合并排序的非递归方法

#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

猜你喜欢

转载自blog.csdn.net/qq_42082542/article/details/80108938