//归并排序是将两个有序表归并为一个有序表,无论是顺序表还是链表,归并操作都可以在线性时间复杂度内实现。其基本操作是将两个位置相信的有序记录子序列归并为一个有序记录序列。c++代码实现如下:
#include <iostream>
using namespace::std;
void Merge(int number[],int i,int m,int n)
{
int j,k,p,size1,size2;
int *left,*right;
size1 = m - i + 1;
size2 = n - m;
left = (int *)malloc(size1 * sizeof(int));
right = (int *)malloc(size2 * sizeof(int));
for (j = 0;j < size1;j++)
{
left[j] = number[i + j];
}
for (k = 0;k < size2;k++)
{
right[k] = number[m + 1 + k];
}
j = k = 0;
p = i;
while(j < size1 && k < size2)
{
if (left[j] <= right[k])
{
number[p++] = left[j++];
}
else
{
number[p++] = right[k++];
}
}
while(j < size1)number[p++] = left[j++];
while(k < size2)number[p++] = right[k++];
}
void Mergesort(int number[],int s,int t)
{
if (s < t)
{
int m = (s + t)/2;
Mergesort(number,s,m);
Mergesort(number,m + 1,t);
Merge(number,s,m,t);
}
}
int main()
{
int *number;
int i=0,size;
cout<<"请输入待排序个数:"<<endl;
cin>>size;
number = (int *)malloc(size * sizeof(int));
while(i < size)cin>>number[i++];
Mergesort(number,0,size - 1);
for (i=0;i<size;i++)
{
cout<<number[i];
}
free(number);
return 0;
}
该算法的时间复杂度为O(n*logn),空间复杂度为O(n);
归并排序是稳定的排序方法。
C++归并排序算法的实现
最新推荐文章于 2022-06-20 10:03:46 发布