《算法导论》--归并排序
来源:互联网 发布:linux 查看死机日志 编辑:程序博客网 时间:2024/05/29 02:55
归并排序,是分治法的一个重要例子。分治法可以分为三个步骤:
1. 分解,将原问题分解为更小的子问题
2. 解决,解决划分的子问题
3. 合并,将子问题的解合并成原问题的解
归并排序是最快的一类排序算法,其时间复杂度为 O(nlgn), 可以通过主方法或者递归数法来证明,主方法我们将会在后面的博客中说到
#include<iostream>
using namespace std;void merge(int *arr, int left, int mid, int right){int i, j,k;int numL = mid - left + 1;int numR = right - mid;int *arrL = new int[numL+1];int *arrR = new int[numR+1];for (i = 0; i < numL; i++) //将数组左边的数复制到arrL中{arrL[i] = arr[left+i];//cout << arrL[i];}arrL[i] = 1000000000; //放置一个极大的数,用来作哨兵牌for (j = 0; j < numR; j++) //将数组右边的数复制到arrR中{arrR[j] = arr[mid +1+ j];//cout << arrR[j];}arrR[j] = 1000000000;i = j = 0;for ( k = left;k<=right;k++) //将数组arr从小到大排序{if (arrL[i] <= arrR[j]) //如果arrL[i]小于等于arrR[j]{arr[k] = arrL[i];i++;}else{arr[k] = arrR[j];j++;}}}void mergeSort(int *arr, int left, int right){int mid;if (left < right){mid = (left + right) / 2; //获取中间数mergeSort(arr, left, mid); //分解数组左边mergeSort(arr,mid+1,right); //分解数组右边merge(arr, left, mid, right); //合并}}int main(){int arr[8] = {2,4,5,7,1,2,3,6};mergeSort(arr, 0, 7);//merge(arr,0,3,7);for (int i = 0; i < 8; i++)cout << arr[i];cout << endl;}
阅读全文
0 0
- 【算法导论】归并排序
- [算法导论]归并排序
- 算法导论-----归并排序
- 【算法导论】归并排序
- 算法导论-归并排序
- 算法导论-归并排序
- 算法导论 归并排序
- 算法导论-归并排序
- 《算法导论》--归并排序
- 算法导论--归并排序
- 算法导论P17 归并排序
- 算法导论_归并排序
- 算法导论学习------归并排序
- 算法导论之归并排序
- 【算法导论】归并排序实现
- 算法导论2归并排序
- 插入、归并排序 《算法导论》
- 算法导论--归并法排序
- leetcode:Binary Tree Level Order Traversal 二叉树层序遍历
- leetcode:Populating Next Right Pointers in Each Node
- 解决UITableViewCell重用导致的重叠(字变粗)
- Java遇到异常
- 【python笔记】使用matplotlib,pylab进行python绘图
- 《算法导论》--归并排序
- 使用Nginx实现反向代理
- SwustOj A simple problem(0093)
- 大数据统计租房市场现状(北京篇)
- javascript创建选项卡----慕课10-1编程挑战
- 深度学习(四)-Tensor Flow的变量创建、初始化、保存和加载
- 亲手创建一台Ubunte+PHP5+MySQL5+Nginx+openSSL+sshFtp的微信小程序云服务器
- Java语言关键字
- metasploit中的情报收集