归并排序
2015-07-13 10:32
204 查看
//归并算法 //主要分两个部分,第一步是分解,拆分到每组只剩下一个,第二步是合并,保持归并之后组内有序。运用递归。 void MergeSort(int arr[],int head,int area) { if (head<area) { int min=(head+area)/2; MergeSort(arr, head, min); MergeSort(arr, min+1, area); Merger(arr, head, min, area); } } //归并 //先给申请额外的辅助空间 void Merger(int arr[],int head,int min,int area) { int *arr1=(int *)malloc(sizeof(int)*(min-head+2)); //不算0 int *arr2=(int *)malloc(sizeof(int)*(area-min+1)); //赋值,这里设置了一个无限大的哨兵,那么在一个数组没有东西之后就剩下这个无线大,那么另一个数组就能全部自动转入目标数组,不用多余的判断,但是要再循环里控制数量,以免哨兵的加入。 int i; for(i=head;i<=min;i++) { arr1[i-head]=arr[i]; } arr1[i-head]=INFINE; for(i=min+1;i<=area;i++) { arr2[i-min-1]=arr[i]; } arr2[i-min-1]=INFINE; //进行归并放到arr的head到area int p=head; int p1=0;int p2=0; for (; p<=area; p++) { if (arr1[p1]<=arr2[p2]) { arr[p]=arr1[p1]; p1++; } else { arr[p]=arr2[p2]; p2++; } } free(arr1); free(arr2); }
相关文章推荐
- Android学习之样式Style与主题theme
- 细小知识点之Java
- PowerDesigner如何将物理数据模型图生成图片?
- 利用LDAP操作AD域
- 【一天一个canvas】Canvas画布调整之移动、缩放、旋转(九)
- Android开发——初步
- Oracle数据库学习
- 用Java实现一些常见的问题
- MyBatis实战——自动回复机器人
- impala源码解析——前端SQL解析阶段
- JDBC中No operations allowed after connection closed
- 代码进行自动约束
- 基于最简单的FFmpeg采样读取内存读写:内存玩家
- 离线使用eclipse的代码提示功能
- Merge Two Sorted Lists
- Java报表生成技术
- Java-文件上传和下载
- KMP 字符串匹配
- MyEclipse 打开Struts配置文件时出错
- Android SwipeRefreshLayout实现工作原理.