最近在备考二级
预习到排序这一块复习
前来整理一下归并排序的代码。
归并排序的具体概念:视频 | 手撕九大经典排序算法,看我就够了!
归并排序的演示:归并排序
#include<stdio.h>
void merge(int arr[],int L,int M,int R) {//合并
int LEFT_SIZE = M - L;
int RIGHT_SIZE = R-M+1;
int LEFT[LEFT_SIZE];
int RIGHT[RIGHT_SIZE];
int i,j,k;
for(i=L; i<M; i++) {
LEFT[i-L] = arr[i];
}
for(i=M; i<=R; i++) {
RIGHT[i-M] = arr[i];
}
i = 0,j = 0 ,k = L;
while(i < LEFT_SIZE && j < RIGHT_SIZE ) {
if(LEFT[i] > RIGHT[j]) {
arr[k] = RIGHT[j] ;
k++;
j++;
}
else {
arr[k] = LEFT[i] ;
k++;
i++;
}
}
while(i < LEFT_SIZE) {
arr[k] = LEFT[i] ;
k++;
i++;
}
while(j < RIGHT_SIZE) {
arr[k] = RIGHT[j];
k++;
j++;
}
}
void mergeSort(int arr[],int L,int R) {//用递归 将数组不断地一分为二 直至分到左右都只剩一个元素时 重新排序合并
if(L == R) {
return ;
} else {
int M = (L+R)/2;
mergeSort(arr,L,M);
mergeSort(arr,M+1,R);
merge(arr,L,M+1,R);
}
}
int main() {
int arr[] = {8,9,10,11,3,4,5,6};
int L = 0;
int R = 7;
//int M = 4;
int i;
for(i=L; i<=R; i++) {
printf("%d ",arr[i]);
}
printf("\n");
mergeSort(arr ,L ,R );
for(i=L; i<=R; i++) {
printf("%d ",arr[i]);
}
return 0;
}