算法竞赛入门经典:第八章 高效算法设计 8.2归并排序
来源:互联网 发布:淘宝客服如何建议 编辑:程序博客网 时间:2024/05/29 17:20
/*归并排序:1 注意每次划分时候使用一个辅助数组输入:81 9 6 3 4 7 9 0输出:0 1 3 4 6 7 9 9*//*关键:1 void mergeSort(int* iArr,int low,int high,int* iTempArr)//注意,high是取不到的,因此传入的实参为数组长度n2 if(high - low > 1)//递归出口,所剩元素大于1,只有一个元素没有必要排序,递归入口一般是:low < high,所剩元素大于1个3 int mid = low + (high - low) / 2;//分治第一步,划分,技巧,向中间节点靠拢4 int l = low,m = mid,i = low;//l,m分别作为排序时的下标,而i是作为临时数组的下标5 mergeSort(iArr,low,mid,iTempArr);//分治第二部,递归求解6 if(m >= high || (l < mid && iArr[l] <= iArr[m]))//如果右边已经排好 或者 左边没排好(易漏,如果左边已经排好,就会数组越界) 并且左边小于等于右边7 for(int j = low ; j < high; j++)//注意,这里由于high取不到,因此用j<high*/#include <stdio.h>#include <stdlib.h>#define MAXSIZE 1024void mergeSort(int* iArr,int low,int high,int* iTempArr)//注意,high是取不到的,因此传入的实参为数组长度n{if(high - low > 1)//递归入口,所剩元素大于1,只有一个元素没有必要排序{int mid = low + (high - low) / 2;//分治第一步,划分,技巧,向中间节点靠拢int l = low,m = mid,i = low;//l,m分别作为排序时的下标,而i是作为临时数组的下标mergeSort(iArr,low,mid,iTempArr);//分治第二部,递归求解mergeSort(iArr,mid,high,iTempArr);while(l < mid || m < high){if(m >= high || (l < mid && iArr[l] <= iArr[m]))//如果右边已经排好 或者 左边没排好(易漏,如果左边已经排好,就会数组越界) 并且左边小于等于右边{iTempArr[i++] = iArr[l++];}else{iTempArr[i++] = iArr[m++];}}for(int j = low ; j < high; j++)//注意,这里由于high取不到,因此用j<high{iArr[j] = iTempArr[j];}}}void print(int* iArr,int n){for(int i = 0 ; i < n; i++){if(i){printf(" %d",iArr[i]);}else{printf("%d",iArr[i]);}}printf("\n");}void process(){int n;while(EOF != scanf("%d",&n)){int iArr[MAXSIZE];int iTempArr[MAXSIZE];for(int i = 0 ; i < n ; i++){scanf("%d",&iArr[i]);}mergeSort(iArr,0,n,iTempArr);print(iArr,n);}}int main(int argc,char* argv[]){process();system("pause");return 0;}
1 0
- 算法竞赛入门经典:第八章 高效算法设计 8.2归并排序
- 算法竞赛入门经典:第八章 高效算法设计 8.3归并排序应用之逆序对数
- 算法竞赛入门经典:第八章 高效算法设计 8.4快速排序应用之第k小的数
- 算法竞赛入门经典:第八章 高效算法设计 8.1动态规划之最大连续和
- 算法竞赛入门经典:第八章 高效算法设计 8.5二分查找
- 算法竞赛入门经典:第八章 高效算法设计 8.6二分查找之lowerBound
- 算法竞赛入门经典:第八章 高效算法设计 8.7二分查找之upperBound
- 算法竞赛入门经典:第八章 高效算法设计 8.8二分查找之范围统计
- 算法竞赛入门经典:第八章 高效算法设计 8.9棋盘覆盖
- 算法竞赛入门经典:第八章 高效算法设计 8.12非线性方程求根
- 算法竞赛入门经典:第八章 高效算法设计 8.16贪心之乘船问题
- 算法竞赛入门经典:第八章 高效算法设计 8.17 贪心之选择不相交区间
- 算法竞赛入门经典(第二版) 刘汝佳-第八章 高效算法设计 例题(13/19)
- 算法竞赛入门经典(第二版)-刘汝佳-第八章 高效算法设计 习题(18/28)
- 算法竞赛入门经典 第八章总结
- 算法竞赛入门经典 高效算法之年龄排序
- 【索引】算法竞赛入门经典-第8章 高效算法设计
- 紫书_第八章_高效算法设计_8.2.1——归并排序
- ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
- 协方差矩阵
- nginx部署
- 对象的比较及hashCode、equals方法的使用
- Oracle expdp/impdp导出导入命令及数据库备份(转)
- 算法竞赛入门经典:第八章 高效算法设计 8.2归并排序
- 淘宝取代分布式事务的方案
- 串口之ReadFile、WriteFile函数详解
- 欢迎使用CSDN-markdown编辑器
- 题目1179:阶乘
- 切换摄像机:一个键控制一个摄像机
- 类的构造函数、拷贝构造函数、赋值运算符和析构函数
- Mac 部分开发环境配置(移动开发)及一些常用命令
- js 小数取整的函数