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

来源:互联网 发布:查电话号码软件 编辑:程序博客网 时间:2024/04/30 04:45

归并排序

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

优点:保证任意长度为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++];elsea[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%。

0 0