算法学习--归并排序
2015-09-23 17:48
211 查看
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并排序实现的思路:
1、基本归并算法一般有两个函数组成,一个用来迭代把一大块数分开,一个用来排序;
2、用来迭代的函数,一共有3个操作:a、求出数组中间的数是第几个(m);b、迭代前面一半,迭代后面一半;c、放到排序里面排序并整合;
3、排序算法:把前面传进来的数组,以中间一个数为界,最前的一个数与中间第一个数比较,如此类推,哪一个小的,放在新数组的前面。这里仅仅是把较小的数放到前面。
4、经过迭代,能把数组分为最小的两个数,进行排序,整合,再排序,最后返回的数组就是一个排序好的数组了。
C++代码如下:
归并排序实现的思路:
1、基本归并算法一般有两个函数组成,一个用来迭代把一大块数分开,一个用来排序;
2、用来迭代的函数,一共有3个操作:a、求出数组中间的数是第几个(m);b、迭代前面一半,迭代后面一半;c、放到排序里面排序并整合;
3、排序算法:把前面传进来的数组,以中间一个数为界,最前的一个数与中间第一个数比较,如此类推,哪一个小的,放在新数组的前面。这里仅仅是把较小的数放到前面。
4、经过迭代,能把数组分为最小的两个数,进行排序,整合,再排序,最后返回的数组就是一个排序好的数组了。
C++代码如下:
#include <iostream> using namespace std; void Merge(int r[], int r1[], int s, int m, int t) { int i=s; int j=m+1; int k=s; while( a74e i<=m&&j<=t){ if(r[i]<=r[j]) r1[k++]=r[i++]; else r1[k++]=r[j++]; } if(i<=m) while(i<=m) r1[k++]=r[i++]; else while(j<=t) r1[k++]=r[j++]; for(int n=s;n<=t;n++) r =r1 ; } void MergeSort(int r[], int r1[], int s, int t) { if(s<t){ int m=(s+t)/2; MergeSort(r,r1,s,m); MergeSort(r,r1,m+1,t); Merge(r,r1,s,m,t); } } int main() { int r[8]={10,3,5,1,9,34,54,565},r1[8]; MergeSort(r,r1,0,7); for(int q=0;q<8;q++) cout<<" "<<r[q]<<endl; system("pause"); return 0; }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例