选择类排序法——归并排序
来源:互联网 发布:淘宝小背包 编辑:程序博客网 时间:2024/05/22 00:10
归并排序的基本思想是基于合并,将两个或者两个以上的有序表合并成一个新的有序表。归并排序是建立在归并操作上的一种有效的排序操作。该算法是采用分治法的一个典型例子。将已知序列的子序列合并,得到完全有序的序列,即先使每一个子序列有序,再使子序列段间有序,若将两个有序表合并成一个有序表,称为二路归并。
与快速排序和堆排序相比,归并排序的最大特点就是它是一种稳定的排序方法。一般情况下,由于要求附加和待排序记录等数量的辅助空间,因此很少利用2-路归并排序进行内部排序,归并的思想主要用于外部排序。
外部排序可分为两步,将待排序的记录分批读入内存,用某种方法在内存排序,组成有序的子文件,再存入外存。第二步,将子文件进行多路归并,生成较长有序子文件,再存入外存,如此反复,直到整个待排序文件有序。
时间效率:归并排序的效率是比较高的,设数列长N,将数列分开成小数列一共要logN步,每步都是一个合并有序列的过程,时间复杂度为O(N),故一共为O(N*logN)。
空间效率:在实现归并排序时,需要和待排序记录等记录的辅助空间,空间复杂度为O(N)。与快速排序和堆排序相比,归并排序的最大特点就是它是一种稳定的排序方法。一般情况下,由于要求附加和待排序记录等数量的辅助空间,因此很少利用2-路归并排序进行内部排序,归并的思想主要用于外部排序。
外部排序可分为两步,将待排序的记录分批读入内存,用某种方法在内存排序,组成有序的子文件,再存入外存。第二步,将子文件进行多路归并,生成较长有序子文件,再存入外存,如此反复,直到整个待排序文件有序。
示例图:
示例代码:
#include <unistd.h>#include <assert.h>#include <stdio.h>#include <stdlib.h>#define N 8/*合并两个相邻的子序列*/void Merge(int r1[], int low, int mid, int high, int r2[]){int i, j, k;i = low;j = mid + 1;k = low;while((i <= mid) && (j <= high)){if (r1[i] <= r1[j]){r2[k] = r1[i++];}else{r2[k] = r1[j++];}++k;}while (i <= mid){r2[k] = r1[i];k++;i++;}while (j <= high){r2[k] = r1[j];k++;j++;}}/*2-路归并排序的递归算法*/void MSort(int r1[], int low, int high, int r3[]){int mid;int r2[N];if (low == high) r3[low] = r1[low];else{mid = (low + high) / 2;MSort(r1, low, mid, r2);MSort(r1, mid+1, high, r2);Merge(r2, low, mid, high, r3);}}int main(int argc, char *argv[]){int i;int r[N] = {10, 50, 70, 30, 40, 80, 60, 45};int b[N];MSort(r, 0, N-1, b);printf("排序后的结果是:");for (i = 0; i < sizeof(r) / sizeof(*r); i++){printf("%3d", b[i]);}printf("\n");return 0;}
- 选择类排序法——归并排序
- 选择排序,归并排序
- 排序—归并排序
- 比较排序总结——直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序
- 9种排序算法——堆排序,归并排序,插入排序,选择排序
- 插入排序、选择排序,冒泡排序、归并排序——(个人笔记)
- 选择排序和归并排序
- 选择排序与归并排序
- 分治法—归并排序
- 排序——归并排序
- 排序——归并排序
- 排序——归并排序
- 排序——归并排序
- 排序——归并排序
- 排序——归并排序
- 排序——归并排序
- 排序——归并排序
- 排序——归并排序
- android通过intent打开文件的方法
- extjs map 键值对访问
- magento 产品列表倒序排列
- FX2N通讯监控记录, PLC程序/参数/注释/文件寄存器的写入和读出
- Android 上层电量管理统计
- 选择类排序法——归并排序
- Android推送服务——百度云推送
- android 异步加载 二
- 我的Java开发学习之旅------>工具类:将播放器的进度值转换成相应的时间格式
- oracle 11G 审计
- cocos2dx监听home键,锁屏,后台转前台暂停功能
- 配置JBoss7数据源
- 小一霸王的小窝于2013.12.06正式建立!
- CEdit类(编辑类)成员函数及消息