#include <stdlib.h>
#include <stdio.h>
typedef int Item;
#define key(A) (A)
#define less(A, B) (key(A) < key(B))
#define exch(A, B) {Item t = A; A = B; B = t;}
#define compexch(A, B) if(less(B,A)) exch(A,B)
// 注意在宏函数这里实际是不做任何执行的,只是替换而已
void merge(Item a[], int l, int m, int r){
Item aux[r];
int i;
int j;
int k;
for(i = m+1; i>l; i--){
aux[i-1] = a[i-1];
}
for(j = m; j<r; j++){
aux[r+m-j] = a[j+1];
}
for(k=l; k<=r; k++){
if(less(aux[j], aux[i])){
a[k] = aux[j--];
} else {
a[k] = aux[i++];
}
}
}
// 归并排序与开始输入无关,但需要额外的空间资源
void mergeSort(Item a[], int l, int r){
int m = (r+l)/2;
if(r <= l){
return;
}
mergeSort(a, l, m);
mergeSort(a, m+1, r);
merge(a, l, m, r);
}
void main(int argc, char* argv[]){
int i;
int N = atoi(argv[1]);
int* a = malloc(N*sizeof(int));
for(i=0; i<N; i++){
a[i] = rand()%1000;
printf("%d ", a[i]);
}
printf("\n");
mergeSort(a, 0, N-1);
for(i=0; i<N; i++){
printf("%d ", a[i]);
}
printf("\n");
}
算法c语言实现 8-3 自顶向下归并排序
最新推荐文章于 2023-10-14 15:06:06 发布