归并排序 C++(不调用库函数)
#include <stdio.h>
#include <stdlib.h>
void mergeSort(int *a, int L, int R);
void merge(int *a,int i,int m,int j);
int main(void){
int i=0;
int array[10]={5,8,9,4,1,3,8,4,0,2};
mergeSort(array,0,9);
for(i=0;i<10;i++){
printf("%d,",array[i]);
}
}
void mergeSort(int *a, int i, int j){
int m=0;
if(i!=j){
int m=(i+j)/2;
mergeSort(a,i,m);
mergeSort(a,m+1,j);
merge(a,i,m,j);
}
}
void merge(int *a,int i,int m,int j){
int b[j-i+1];
int p=0;
int p1=i;
int p2=m+1;
while(p1<=m&&p2<=j){
b[p++]=a[p1]>a[p2]? a[p2++]:a[p1++];
}
while(p1<=m){
b[p++]=a[p1++];
}
while(p2<=j){
b[p++]=a[p2++];
}
for(p=0;p<j-i+1;p++){
a[i+p]=b[p];
}
}
|