#include<stdio.h>
void merge(int a[],int a_left,int a_right,int b_left,int b_right){
int i=a_left,j=b_left;
int temp[1000];
int count=0;
while(i<=a_right && j<=b_right){
if(a[i]<a[j]){
temp[count++]=a[i++];
}
else{
temp[count++]=a[j++];
}
}
while(i<=a_right){
temp[count++]=a[i++];
}
while(j<=b_right){
temp[count++]=a[j++];
}
for(int k=0;k<count;k++){
a[a_left+k]=temp[k];
}
}
void mergesort(int a[],int N){
for(int i=2;i/2<=N;i*=2){
for(int j=0;j<N;j+=i){
int mid=j+i/2-1;
if(mid+1<=N)
merge(a,j,mid,mid+1,(j+i<N)?j+i-1:N-1);
}
}
}
int main(void){
int a[10]={1,3,5,10,9,2,4,6,8,7};
mergesort(a,10);
for(int i=0;i<10;i++){
printf("%d ",a[i]);
}
}
算法小白的学习之路:day02-归并排序——非递归版
最新推荐文章于 2024-07-12 18:56:03 发布