Merge Sort Algorithm
来源:互联网 发布:广州软件开发工资 编辑:程序博客网 时间:2024/05/16 15:32
合并排序算法
给定整数数组,使用合并排序算法排序。
合并排序是一种有效的排序算法,可以产生稳定的排序,这意味着实现保留排序输出中相等元素的输入顺序。 Mergesort是一种比较排序,即它可以排序定义少于关系的任何类型的项目。合并排序最常见的实现不在原位排列。
Mergesort如何工作?
Mergesort是一个分裂和征服算法。像所有的分裂和征服算法一样,mergesort首先将一个大阵列划分成两个较小的子阵列,然后递归地对子阵列进行排序。基本上,整个过程涉及两个步骤 -
将未排序的数组划分为n个子数组,每个子数组包含1个元素(1个元素的数组被视为排序)。
重复合并子数组以生成新的排序子数组,直到只剩下1个子数组。这将是排序的数组。
下图显示了用于对7个整数数组进行排序的递归合并排序算法的自顶向下视图。
合并排序步骤
C ++
#include <bits / stdc ++。h>using namespace std;#define N 15//合并两个排序的子阵列arr [low .. mid]和arr [mid + 1 .. high]void Merge(int arr [],int aux [],int low,int mid,int high){ int k = low,i = low,j = mid + 1; //左边和右边都有元素 while(i <= mid && j <= high) { if(arr [i] <arr [j]) aux [k ++] = arr [i ++]; 其他 aux [k ++] = arr [j ++]; } //复制剩余元素 而(i <= mid) aux [k ++] = arr [i ++]; //不需要复制下半部分 //复制到原始数组以反映排序顺序 for(int i = low; i <= high; i ++) arr [i] = aux [i];}//使用辅助阵列辅助排列数组arr [low..high]void MergeSort(int arr [],int aux [],int low,int high){ // 基本情况 if(high == low)// if run size == 1 返回; //找到中点 int mid =(low +((high-low)>> 1)); //递归分裂运行到两半,直到运行大小为== 1, //然后合并它们并返回回调链 MergeSort(arr,aux,low,mid); // split / merge left half MergeSort(arr,aux,mid + 1,high); // split / merge right half 合并(arr,辅助,低,中,高);}//检查arr是否按升序排序的功能bool isSorted(int arr[]){ int prev = arr[0]; for (int i = 1; i < N; i++) { if (prev > arr[i]) { cout << "MergeSort Fails!!"; return false; } prev = arr[i]; } return true;}// 主功能int main(){ int arr[N], aux[N]; srand(time(NULL)); //生成随机输入的整数 for (int i = 0; i < N; i++) aux[i] = arr[i] = (rand() % 100) - 50; //使用辅助阵列辅助排序数组arr MergeSort(arr, aux, 0, N - 1); if (isSorted(arr)) { for (int i = 0; i < N; i++) cout << arr[i] << " "; } return 0;}
输出:
-50 -41 -34 -23 -21 -11 5 9 10 19 26 33 35 40 49
性能:
合并排序的最差情况时间复杂度为O(nlogn)。复发关系是
T(n)= 2T(n / 2)+ cn = O(nlogn)
重复基本上总结了mergeesort - 排序原始列表的一半大小的两个列表,并添加了合并结果两个列表所需的n个步骤。
辅助空间为O(n)。
外部合并排序
阅读全文
0 0
- Algorithm 101----merge sort
- Algorithm Intro - Merge Sort
- Merge Sort Algorithm
- Algorithm Part I:Merge Sort
- Algorithm of the Week: Merge Sort
- Introduction to Algorithm - Summary of Chapter 2(2) - Merge Sort
- sort algorithm
- sort algorithm
- Sort algorithm
- Sort Algorithm-->Bubble Sort
- Sort Algorithm-->Select Sort
- Merge Sort
- Merge sort
- merge sort
- merge sort
- merge sort
- Merge Sort
- merge sort
- 理解CSS雪碧图
- DFS 水题Lake Counting
- 微信公众号平台网页授权接口中获取到的授权code传递给(即一个微信公众号网页授权给)任何其他多个回调域名下的url,解决了只能设置一个网页授权回调域名的问题,解决了redirect_uri参数错误的问
- python中的intern机制
- numpy基础——numpy.tile
- Merge Sort Algorithm
- 1121. Damn Single (25)
- 《自己手动写一个编译器、连接器》一(4)
- 加入收款二维码、郑重声明、去掉强制参数scope、强制参数优先级高于筛选参数
- 2017年7月20日01:23:23
- 弥漫之夜
- Android下载服务案例
- Python 学习日知录(八)- 迭代器初步
- Java设计模式之创建型模式-工厂模式(Factory)