您的位置:首页 > 编程语言 > C语言/C++

归并排序(mergesort)

2016-08-16 10:21 399 查看
它在时间复杂度上由于我们较常用的冒泡或者查找等算法,它实现了在最坏情况下O(nlogn)


C语言实现:

#include<stdio.h>
int num[100];
void merge(int low,int mid,int hi)
{
int temp[100];
int i,j,k;
i=k=low;
j=mid;
while(j<hi||i<mid)
{
if((i<mid)&&(j>=hi||(num[i]<num[j])))
{
temp[k++] = num[i++];
}
if((j<hi)&&(i>=mid||num[j]<num[i]))
{
temp[k++] = num[j++];
}
}
for(i=low;i<hi;i++)
{
num[i] = temp[i];
}
}
void mergesort(int low,int hi)
{
int mid;
if(hi - low < 2)
return;
else
{
mid = (low + hi)>>1;
mergesort(low,mid);
mergesort(mid,hi);
}
merge(low,mid,hi);
}
int main()
{
int i,j,n;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
mergesort(0,n);

for(i=0;i<n;i++)
{
printf("%d  ",num[i]);
}
}
return 0;
}


归并排序即采用分治策略,将一个排列先连续分割为一个个元素,这是保证了每个排列的有序性,而这个算法的关键在于要将分割好的小排列将其合并为一个有序的大排列,这是最关键的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息