菜鸟一枚,
刚刚学习数据结构与算法,
为了加深理解,
所以与同学们分享学习过程。
今天学习的是,
归并排序!!!
上代码:
#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;
for(i = L;i < M;i++) //左边已排序好的
{
left[i-L] = arr[i];
}
for(i = M;i <= R;i++) //右边已排序好的
{
right[i-M] = arr[i];
}
i = 0;
int j = 0,k = L;
while(i < LEFT_SIZE&&j < RIGHT_SIZE) //进行判断合并
{
if(left[i] < right[j])
{
arr[k] = left[i];
i++;
k++;
}
else
{
arr[k] = right[j];
j++;
k++;
}
}
while(i < LEFT_SIZE)//左边或右边都以放入数值的,另一边剩下的直接填入数组
{
arr[k] = left[i];
i++;
k++;
}
while(j < RIGHT_SIZE)
{
arr[k] = right[j];
j++;
k++;
}
}
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[] = {2,5,1,10,3,9,7,4};
int L = 0;
//int M = 4;
int R = 7;
int i ;
mergesort(arr,L,R);
for(i = 0 ;i <= R;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
谢谢同学们的阅读!!!