归并排序法:
#include<stdlib.h>
#include<stdio.h>
#define ARRARY_LENGTH (10)
void merge(int *A, int p,int q,int r){
if(A==NULL || p>r || q>r){
printf("Error input\n");
return;
}
int n1 = q - p + 1;
int n2 = r -q;
int *L,*R;
L = (int *) malloc(sizeof(int)*n1);
R = (int *) malloc(sizeof(int)*n2);
for(int i = 0 ; i < n1; i++ ){
L[i] = A[p+i];
}
for(int j = 0 ; j < n2 ; j++){
R[j] = A[q+j+1];
}
int i = 0;
int j = 0;
int idx = p;
while(i<n1 && j<n2){
if(L[i] <= R[j]){
A[idx++] = L[i++];
}
else{
A[idx++] = R[j++];
}
}
if(i < n1){
for(; i<n1; i++){
A[idx++] = L[i];
}
}
else{
for(; j<n2; j++){
A[idx++] = R[j];
}
}
free(L), L=NULL;
free(R), R=NULL;
}
void merge_sort(int *A,int p,int r){
if(A==NULL || p>r){
printf("Error input\n");
return;
}
if(p<r){
int q = (p+r)/2;
merge_sort(A,p,q);
merge_sort(A,q+1,r);
merge(A,p,q,r);
}
}
int main(){
int AB[ARRARY_LENGTH]={1,3,5,6,7,9,10,2,8,4};
merge_sort(AB,0,ARRARY_LENGTH-1);
for(int i=0; i<ARRARY_LENGTH;i++){
printf("num %d : %d\n",i,AB[i]);
}
system("pause");
return 0;
}