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 ...
随机推荐
- 025-PHP常用字符串函数(二)
<?php $text = "My dog's name is Angus."; //print Angus print(substr($text, , )."&l ...
- 110-PHP类成员属性赋值
<?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...
- 《新标准C++程序设计》3.9-3.10(C++学习笔记11)
一.C++程序到C程序的翻译 程序示例分析: C++: class CCar { public: int price; void SetPrice (int p); }; void CCar::Set ...
- oracle11g导出dmp文件时不能导出空表,导致缺表
一.执行 select 'analyze table '||table_name||' compute statistics;' from user_tables; 将该查询语句查询到的结果粘贴到sq ...
- PHP网页简单的计算机源代码
还是那样老师留的作业,百度一波和老师留的作业有区别!自己写一下!! 作业题目: 实现PHP网页的计算器功能.至少实现运算符 +.-.*./.取模的功能. (提示:可以点击‘等号’进行运算,也可以另外添 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-qrcode
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- vue作用域插槽实践
引言 我在练手的时候发现后端返回的数据可以通过两种方式渲染 (自己遇到的 可能你都会 哈哈哈) 后端传过来的数据函数 from django.http import JsonResponse def ...
- oracle中设置主键
1.创建表 .创建表 create table "c_user"( "id" number primary key, "username" ...
- POJ 3984:迷宫问题 bfs+递归输出路径
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11844 Accepted: 7094 Description ...
- 用AD 输出BOM时提示failed to open excel template
解决办法: 去掉这个√!