归并排序迭代实现
#include <stdio.h>
#include <stdlib.h>
void mergesort(int num[],int len);
int main(){
int num[10] = {5,2,6,0,3,9,1,7,4,8};
mergesort(num,10);
for(int i = 0; i<10 ;i++){
printf("%d ",num[i]);
}
}
void mergesort(int num[],int len){
int i,next,left_min,left_max,right_min,right_max;
int *temp = (int*)malloc(len * sizeof(int));
for(i=1; i<len; i*=2){
for(left_min=0; left_min < len-i; left_min = right_max){
right_min = left_max = left_min + i;
right_max = right_min + i;
next = 0;
if(right_max > len){
right_max = len;
}
while(left_min < left_max && right_min < right_max){
if(num[left_min] < num[right_min]){
temp[next++] = num[left_min++];
}else{
temp[next++] = num[right_min++];
}
}
while(left_min < left_max){
num[--right_min] = num[--left_max];
}
while(next > 0){
num[--right_min] = temp[--next];
}
}
}
}