Sort - Merge Sort
归并排序思想
归并排序时间复杂度分析
归并排序特点
归并排序实现
递归
#include <iostream>
using namespace std;
void merge(int *arr,int *temp,int left,int mid,int right) {
int p=left,q=mid+1,index=0;
while(p<=mid&&q<=right) {
if(arr[p]<arr[q])temp[index++]=arr[p++];
else temp[index++]=arr[q++];
}
while(p<=mid)temp[index++]=arr[p++];
while(q<=right)temp[index++]=arr[q++];
memcpy(arr+left, temp, sizeof(int)*(right-left+1));
}
void msort(int *arr,int *temp,int left, int right) {
if(left>=right)return;
int mid = left+((right-left)>>1);
msort(arr,temp,left,mid);
msort(arr,temp,mid+1,right);
merge(arr,temp,left,mid,right);
}
void merge_sort(int arr[],int len) {
int *temp=(int *)malloc(sizeof(int)*len);
if(temp!=NULL) {
msort(arr,temp,0,len-1);
free(temp);
}
}
int main(int argc,char *argv[]) {
int arr[]= {1,6,4,7,2,5,3,9,8,0};
merge_sort(arr,sizeof(arr)/sizeof(int));
for(int i=0;i<10;i++)printf("%d ",arr[i]);
return 0;
}
非递归
#include <iostream>
using namespace std;
void merge(int *arr,int *temp,int left,int mid,int right) {
int p=left,q=mid+1,index=left;
while(p<=mid&&q<=right) {
if(arr[p]<arr[q])temp[index++]=arr[p++];
else temp[index++]=arr[q++];
}
while(p<=mid)temp[index++]=arr[p++];
while(q<=right)temp[index++]=arr[q++];
}
void msort(int *arr,int *temp,int n,int len) {
int i;
for(i=0; i<=n-2*len; i+=2*len)
merge(arr,temp,i,i+len-1,i+2*len-1);
if(i+len<n) //剩余两段未排序
merge(arr,temp,i,i+len-1,n-1);
else { // 剩余一段未排序
for(int j=i; j<n; j++)
temp[j]=arr[j];
}
}
void merge_sort(int arr[],int n) {
int *temp=(int *)malloc(sizeof(int)*n);
int len =1;
if(temp!=NULL) {
while(len<n) {
msort(arr,temp,n,len); //将排序结果保存在temp数组中
len*=2;
msort(temp,arr,n,len); //将排序结果保存在arr数组中(如果len>n,只做了从temp到arr的元素拷贝)
len*=2;
}
free(temp);
}
}
int main(int argc,char *argv[]) {
int arr[]= {1,17,6,4,7,2,12,5,3,9,8,19,0,10,15,11,14,13,18,16};
merge_sort(arr,sizeof(arr)/sizeof(int));
for(int i=0; i<10; i++)printf("%d ",arr[i]);
return 0;
}
Sort - Merge Sort的更多相关文章
- [Algorithms] Sorting Algorithms (Insertion Sort, Bubble Sort, Merge Sort and Quicksort)
Recently I systematicall review some sorting algorithms, including insertion sort, bubble sort, merg ...
- 复杂度分析 quick sort&merge sort
空间复杂度看新开了什么数据结构就够了 公式=几个点*每个点执行了多少次 二叉树都是n次 二分法查找:lgn 全部查找:n n:找一个数,但是两边都要找.相当于遍历.类似于rotated sorted ...
- sicily 1154. Easy sort (tree sort& merge sort)
Description You know sorting is very important. And this easy problem is: Given you an array with N ...
- [算法]——归并排序(Merge Sort)
归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...
- SQL Tuning 基础概述06 - 表的关联方式:Nested Loops Join,Merge Sort Join & Hash Join
nested loops join(嵌套循环) 驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_n ...
- 排序合并连接(sort merge join)的原理
排序合并连接(sort merge join)的原理 排序合并连接(sort merge join)的原理 排序合并连接(sort merge join) 访问次数:两张表都只会访 ...
- Sort merge join、Nested loops、Hash join(三种连接类型)
目前为止,典型的连接类型有3种: Sort merge join(SMJ排序-合并连接):首先生产driving table需要的数据,然后对这些数据按照连接操作关联列进行排序:然后生产probed ...
- 归并排序(Merge Sort)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序 ...
- 归并排序(merge sort)
M erge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower ord ...
随机推荐
- 二十八、SAP中通过以字段以表格形式输出
一.重点在与表格长度的计算,以及LINE-SIZE的用法,代码如下 二.输出效果如下
- 139-PHP static后期静态绑定(二)
<?php class test{ //创建test类 public function __construct(){ static::getinfo(); //后期静态绑定 } public s ...
- Java Integer Addition Subtration Overflow 整数加减溢出
leetCode有道题Reverse Integer,因为int的最大值为2的31次方减一,最小值为-2的31次方. 我一开始的代码将res递归加放在try中,以为溢出会有异常,然而并没有. 因为出传 ...
- HDU 4952 Number Transformation 多校8 机智数学
哎.这个题想了好久,状态不对啊...一个大家都出的题..当时想到肯定是可以有什么规律来暴力,不用算到10的10次方 对于某个k,x.从1到k循环,每次求一个新的x,这个x要大于等于原x,并且要是i的倍 ...
- 经验分享:如何搞定Personal Statement?
最近又到申请季啦,如何自己DIY申请,如何准备文书成为众多留学生关心的问题.不管是你申请本科,硕士,还是博士,相信这篇文章都能帮助到你.下面来说一下文书中一个很重要的组成,就是个人陈述Personal ...
- ELK 介绍
章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash ELK是什么? ELK是3个开源产品的组合: Elastics ...
- P 1029 旧键盘
转跳点:
- P 1025 链表反转
转跳点:
- 【LeetCode】解码方法
[问题] 一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2…'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数. 示例 : 输 ...
- apache2+django+virtualenv 服务器部署实战
目录 基本配置 配置python环境 安装 python.pip 安装 virtualenv 配置python虚拟环境 配置 apache2 安装 apache2 安装 mod-wsgi 服务 部署d ...