跟着《算法导论》学习——插入排序与归并排序
来源:互联网 发布:sql group by没有分组 编辑:程序博客网 时间:2024/06/05 09:40
读前声明:本人所写帖子主要为了记录本人学习的一个过程,无他想法,由于内容比较肤浅,如有雷同,非常正常!!!
本文内容:
本文主要是参考《算法导论》这本书,完成部分算法编写,可能编程习惯或者风格比较差,还请多多批评。
1、插入排序(Insertion Sort)
插入排序是对少量元素进行排序的有效算法,其机理与很多人打牌时,整理手中牌时的做法差不多。开始摸牌时,我们的左手是空的,牌面朝下放在桌上,接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的每一张牌从右到左的比较。
其代码如下:
void InsertionSort(int a[],int n){for(int j=1;j<n;j++){int key = a[j];int i = j-1;while (i>=0&&a[i]>key){a[i+1] = a[i];i--;}a[i+1] = key;}2、归并排序(Merge sort)
归并排序是分治法(Divide-and-Conquer)的一个应用。分治法的的策略如下:将原问题划分为n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。分治模式在每一层递归都有三个步骤:
分解(Divide):将原问题分解成一系列子问题;
解决(Conquer):递归地求解各子问题,若子问题足够小,则直接求解;
合并(Combine):将子问题的结果合并成原问题的解
归并排序完全按照上述模式,直观的操作如下:
分解:将n个元素分成各含n/2个元素的子序列;
解决:用合并排序法对两个子序列递归地排序;
合并:合并两个已排序的子序列以得到排序结果。
在对子序列排序时,其长度为1时递归结束,单个元素被视为已排序的。
合并排序的关键步骤在于合并步骤中的合并两个已排序子序列。为做排序,引入一个辅助过程Merge,其过程是将两个子序列经过比较,合并成一个大的排好序的数组。
Merge子函数如下:
void Merge(int a[],int b[],int left,int middle,int right){for (int i=left;i<=right;i++){b[i] = a[i];}int s1 = left;int s2 = middle+1;int t = left;while (s1<=middle&&s2<=right){if (b[s1]<=b[s2]){a[t++] = b[s1++];} else{a[t++] = b[s2++];}}if (s1==middle+1){while (s2<=right){a[t++] = b[s2++];}}if (s2==right+1){while (s1<=middle){a[t++] = b[s1++];}}}
归并排序算法过程:
void MergeSort(int a[],int b[],int left,int right){if(left>=right) return;int middle = (left+right)/2;MergeSort(a,b,left,middle);MergeSort(a,b,middle+1,right);Merge(a,b,left,middle,right);}
0 0
- 跟着《算法导论》学习——插入排序与归并排序
- 归并排序——算法导论学习
- 插入、归并排序 《算法导论》
- 跟着《算法导论》学习——堆排序
- 跟着《算法导论》学习——快速排序
- 【算法导论实验1】插入排序与归并排序
- 算法导论:插入排序和归并排序
- 学习算法导论——插入排序
- 算法导论学习------归并排序
- 算法导论—排序—插入排序
- 插入排序算法学习——算法导论学习笔记
- 算法导论-插入排序,归并排序,快速排序总结
- 算法导论——归并排序
- 算法导论笔记——归并排序
- 算法导论例程——归并排序
- 算法导论——归并排序
- 算法导论—归并merge排序
- 《算法导论》学习笔记之Chapter 2-2.1,2.2,2.3插入排序,选择排序,归并排序
- 各种iOS开源类库
- Ti DSP 优化基本策略
- 用 Eclipse 和 Ant 进行 Python 开发
- fstat函数及struct stat结构
- 故事来源于生活还是网络?
- 跟着《算法导论》学习——插入排序与归并排序
- 检测浏览器支持哪些HTML5新特性的方法
- Mac下的常用软件
- 4G时代聊天畅想
- 使用events DUMP buffer cache中指定的数据块
- boost循序渐进1: boost的安装及注意使用注意事项
- DSP 优化心得
- Combo Box 组合框控件总结
- MySql5.0 Table错误:is marked as crashed and last (automatic?) 解决办法