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 ...
随机推荐
- 利用ThoughtWorks.QRCode生成二维码
一.项目添加ThoughtWorks.QRCode.dll和System.Drawing.dll的引用 二.创建二维码公共处理类(QRCodeHandler.cs) /// <summary&g ...
- Bean XML 配置(1)- 通过XML配置加载Bean
系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...
- tyvj 1860 后缀数组
真·模板题(然而还是TLE了,tyvj真是个毒瘤,输出double什么的就是 -0.00000000,这些就TLE2333) 简单的说一下本蒟蒻看了一天后缀数组的收获(这东西太神了,,,wcwc,,收 ...
- AndroidAutoLayout
AndroidAutoLayout [DEPRECATED]Android屏幕适配方案,直接填写设计图上的像素尺寸即可完成适配. 目前没有精力,已停止维护,使用前务必看明白代码,明确该方案可以解决自身 ...
- Python Learning Day8
bp4解析库 pip3 install beautifulsoup4 # 安装bs4pip3 install lxml # 下载lxml解析器 html_doc = """ ...
- 输入框中提示信息(html5)
placeholder 属性规定可描述输入字段预期值的简短的提示信息(比如:一个样本值或者预期格式的短描述). 该提示会在用户输入值之前显示在输入字段中. 注意:placeholder 属性适用于下面 ...
- Day 7:TreeSet
补充上一日:HashCode方法默认返回的是内存地址,String类已经重写了对象的HashCode方法 方法细节:取出数组中的值或字符串的值按照规定计算返回一个值,如果两个字符串内容一致就会返回相同 ...
- 18 12 30 新建一个 django project
1. 新建一个 django project 1 2 django-admin.py startproject project_name 特别是在 windows 上,如果报错,尝试用 django- ...
- sort()函数使用详解
使用时需要导入头文件<algorithm> #include<algorithm> 语法描述:sort(begin,end,cmp),cmp参数可以没有,如果没有默认非降序排序 ...
- js正则 -180 到180 小数点后无限位
正则 -180 到180 小数点后无限位/^0$|^-?0\.\d*[1-9]$|^-?[1-9](\.\d*[1-9])?$|^-?[1-9]\d(\.\d*[1-9])?$|^-?1[0-7]\d ...