二路-归并排序归纳
来源:互联网 发布:k算法求最小生成树 编辑:程序博客网 时间:2024/06/01 20:50
【递归二路划分 + 分割后的2个数组归并】
//归并排序:递归二路划分+归并思想==二路,归并排序//函数的参数列表是:a,l,r;这是每次需要循环递归的初始条件 :数组(操作对象),两个端点//不需要初始化端点,端点由函数传入 //1、二分+ 2.两个左右两边的倒叙递归;由里向外void Two_divide_Merge_Sort(int a[],int left ,int right){ if (left < right) { int mid = (left + right) / 2; Two_divide_Merge_Sort(a,left,mid);//左边部分二分。 递归1的从内到外 Two_divide_Merge_Sort(a, mid + 1, right); //右边部分二分。 递归2的从内到外 //下面是函数的最小单元的操作了:归并、 //对已经分成的两段数组,进行归并排序 merge1(a, left, mid, mid + 1, right); //循环体 }}===============下面是归并子函数================//一个数组,分成两段,有2对首尾端点.归并+合并到原来的数组void merge1(int a[],int l1 ,int r1,int l2,int r2){ //由函数参数列表已经把数字分成了两个数组 int i = l1, j = l2;//初始化指针 int temp[1001] = { 0 }; int index = 0; while (i<= r1 && j <= r2){ //注意是可以取到等号的 因为是从l1开始的 if (a[i] <= a[j]) //注意是可以取到等号,两个元素可以相等 { temp[index++] = a[i]; i++; } else{ temp[index++] = a[j++]; } } while (i <= r1){ temp[index++] = a[i]; i++; } while (j <= r2){ temp[index++] = a[j]; j++; } //2、合并到传入参数的数组中 for (int i = 0; i < index; i++) { a[l1 + i] = temp[i]; }}int a[8] = { 7, 3, 4, 1, 5, 4, 6, 9 };
0 0
- 二路-归并排序归纳
- 归并排序:二路归并
- 归并排序--二路归并
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- 二路归并排序
- centos7设置tomcat7为系统服务的方法
- Redis实现分布式锁通用工具
- 使用SpringData JPAQL获取查询结果query.getResultList()读取后EntityManager会自动关闭
- java设计模式-工厂模式(简单工厂模式和工厂方法模式)
- viewpager onpagechangelistener addonpagechangelistener
- 二路-归并排序归纳
- 建议120:为程序集指定强名称
- 打败肖奈大神的不只有贝微微——女神林洁教你玩设计
- eclipse提交代码错误:rejected –non-fast-forward解决方法
- iOS8中使用CoreLocation定位
- Rabbitmq的Web监控工具
- laravel加入验证码类几种方法
- JAVA语言工具类封装-基于poi的excel导出功能
- Android进度条