05_归并排序
来源:互联网 发布:手机维棠软件 编辑:程序博客网 时间:2024/06/15 00:38
归并排序算法思路:
===>将一个序列分成有序的两个序列,然后根据大小将其归并,这样就能得到有序序列。
问题来了,怎么才能分出两个有序的子序列呢?
===> 如果这两个子序列都只有一个元素,那就是有序子序列了,直接归并不就成为一个有序的序列了。
是不是想到什么了?
===>对,就是将一个序列分成两个子序列归并,这两个子序列又分成四个子序列归并。规律,先分后归,这不就是递归的思想了。
/*这是归并函数,将两个有序序列归并*/void wei::Chen::merge(int src[], int dst[], int low, int mid, int high) { int i = low; int j = mid + 1; int k = low; while ( (i<=mid)&&(j<=high) ) { if ( src[i]<src[j] ) { dst[k++] = src[i++]; }else { dst[k++] = src[j++]; } } while (i <= mid) { dst[k++] = src[i++]; } while (j <= high) { dst[k++] = src[j++]; }}/*先分成两个子序列,然后归并。每个子序列又分成两个子序列,然后归并成一个有序序列*/void wei::Chen::mergesort(int src[], int dst[], int low, int high, int max) { if ( low==high ) { dst[low] = src[low]; }else { int mid = (low + high) / 2; int* space = (int*)malloc( sizeof(int)*max ); if ( space!=nullptr ) { mergesort(src,space ,low,mid,max); mergesort(src,space,mid+1,high,max); merge(space,dst ,low,mid,high); } free( space ); }}
阅读全文
0 0
- 05_归并排序
- 排序算法-归并排序_归并排序
- C++_归并排序
- 06_归并排序
- 排序算法_归并排序
- 再写_归并排序
- 算法导论_归并排序
- JAVA_算法_归并排序
- 数据结构(C#)_排序算法(归并排序)
- 排序算法_插入排序、归并算法
- 基本排序_归并排序_Java实现
- 数据结构_内部排序_希尔排序_快速排序_堆排序_归并排序_地址排序
- 归并排序_数组交集-php版
- poj 2299_归并排序
- 算法课_归并排序应用
- 归并排序_完成merge方法
- 数据结构_归并排序C语言源代码
- 基础数据结构算法_快速排序,堆排序,归并排序
- 图片获取宽高以及调用,预加载设置
- Rxjava1.x实现定时器
- 二分查找
- SmartImageView重新实现网络图片的加载
- sql中时间以5分钟,半个小时,任意间隔分组
- 05_归并排序
- ViewPager与PagerAdapter深度解析
- 日志分析查看
- iOS 键盘收起异常的解决办法
- 泛型 类 ComboBoxItem<T>
- netty探索之入门前言篇
- ZipUtil压缩解压工具类——java
- 本文实例讲述了js实现window.open不被拦截的解决方法。
- Spring Boot中使用AOP统一处理Web请求日志