您的位置:首页 > 其它

排序算法之归并排序

2017-03-19 09:41 281 查看
#include <stdio.h>
int main()
{
void marge_sort(int arr[],int first,int last);
void merge(int arr[],int low,int mid,int high);
int data[10];
int i=0,length=10;
for(i=0;i<10;i++)
{
scanf("%d",&data[i]);
}
merge_sort(data,0,length-1);
for(i=0;i<10;i++)
{
printf("%d ",data[i]);
}
return 0;
}
void merge(int arr[],int low,int mid,int high)
{
int i,j;
int *data = (int *)malloc(sizeof(int)*(high-low+1));
int left_low = low;
int left_high = mid;
int right_low = mid+1;
int right_high = high;
for(i=0;left_low<=left_high&&right_low<=right_high;i++)
{
if(arr[left_low]<arr[right_low])
{
data[i] = arr[left_low++];
}
else
data[i] = arr[right_low++];
}
while(left_low<left_high)
{
data[i++] = arr[left_low++];
}
while(right_low<right_high)
{
data[i++] = arr[right_low++];
}
for(i=0;i<high-low+1;i++)
arr[low++] = data[i];
free(data);
return;
}
void merge_sort(int arr[],int first,int last)
{
int mid;
if(first<last)
{
mid = (last+first)/2;
merge_sort(arr,first,mid);
merge_sort(arr,mid+1,last);
merge(arr,first,mid,last);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: