数据结构与算法:C++实现归并排序
2016-05-08 21:03
573 查看
归并排序
思想:将两个有序数组归并成一个更大的数组。
优点:保证任意长度为N的数组,排序需要所需时间与NlogN成正比。
缺点:所需的额外空间与N成正比
思想:将两个有序数组归并成一个更大的数组。
优点:保证任意长度为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%。
相关文章推荐
- NYOJ 简单数据结构
- 排序算法——快速排序
- 共同学习Java源代码--数据结构--AbstractList抽象类(二)
- 共同学习Java源代码--数据结构--AbstractList抽象类(一)
- 【数据结构】C语言实现栈的进栈,出栈,遍历,清空等操作
- 数据结构与算法练习-二叉树
- 共同学习Java源代码--数据结构--List接口
- 排序算法——冒泡排序
- 排序算法——选择排序
- 排序算法——希尔排序
- 单链表的节点内数据值的删除问题(携程网笔试题)
- 数据结构——排序相关问题
- 数据结构(严蔚敏)第四章 串 实例——索引表
- Windows 内核数据结构学习总结
- 搜索引擎索引数据结构和算法
- 【数据结构】处理哈希冲突的开链法(哈希桶)算法实现
- 【数据结构】哈希表的线性探测算法
- 数据结构与算法——递归简论
- 【搜索引擎】搜索引擎索引数据结构和算法
- 第1章 概述