您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法:C++实现归并排序

2016-05-08 21:03 573 查看
归并排序

思想:将两个有序数组归并成一个更大的数组。

优点:保证任意长度为N的数组,排序需要所需时间与NlogN成正比。

缺点:所需的额外空间与N成正比

#include<iostream>

using namespace std;

int temp[100];
void Merge(int* a, int from, int mid, int to)
{
int i = from;
int j = mid + 1;
for (int i = from; i <= to; i++)
temp[i] = a[i];
for (int k = from; k <= to; k++)
{
if (i > mid)
a[k] = temp[j++];
else if (j > to)
a[k] = temp[i++];
else if (temp[i] < temp[j])
a[k] = temp[i++];
else
a[k] = temp[j++];
}
}

void MergeSort(int* a, int from, int to)
{
if (from >= to)
return;
int mid = (from + to) / 2;
MergeSort(a, from, mid);
MergeSort(a, mid + 1, to);
Merge(a, from, mid, to);
}

int main()
{
int a[] = { 12, 2, 3, 43, 5, 46, 74, 28, 30, 19, 11, 9 };
int n = sizeof(a) / sizeof(int);
MergeSort(a, 0, n - 1);
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
对于小规模的子数组可以使用插入排序,这可以改进大多数递归算法的性能,因为递归会使小规模问题中的方法的调用过于频繁。这一般可以将归并排序的运行时间缩短10%~15%。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: