(程序员面试题)归并排序
来源:互联网 发布:天刀捏脸数据女女神 编辑:程序博客网 时间:2024/06/14 20:09
归并排序是效率仅次于快速排序的一种稳定排序,缺点是需要一块额外的空间用来存放需要处理的数据,具体代码如下:
#include <stdio.h>void merge(int num[], int start, int middle, int end) { int tmp1[10], tmp2[10]; int i, j, cur, len1, len2; int pos1, pos2; for (i = start, len1 = 0; i <= middle; i++, len1++) { tmp1[len1] = num[i]; } for (j = middle + 1, len2 = 0; j <= end; j++, len2++) { tmp2[len2] = num[j]; } tmp1[len1] = tmp2[len2] = 10000; // ensure the end is bigger enough, otherwise it will overflow for (cur = start, pos1 = 0, pos2 = 0; cur <= end; cur++) { if (tmp1[pos1] <= tmp2[pos2]) { num[cur] = tmp1[pos1++]; } else { num[cur] = tmp2[pos2++]; } } int a; for (a = start ; a <= end; a++) { printf("%d, ", num[a]); } printf("\n");}void merge_sort(int num[], int start, int end) { if (start < end) { int middle = (start + end)/2; merge_sort(num, start, middle); merge_sort(num, middle + 1, end); merge(num, start, middle, end); }}int main(void){ int num[] = {4,1,2,7,3,9,6,5,8}; merge_sort(num, 0, 8); return 0;}
运行结果如下:
cheny.le@cheny-ThinkPad-T420:~$ gcc merge_sort.c
cheny.le@cheny-ThinkPad-T420:~$ ./a.out
1, 4,
1, 2, 4,
3, 7,
1, 2, 3, 4, 7,
6, 9,
5, 8,
5, 6, 8, 9,
1, 2, 3, 4, 5, 6, 7, 8, 9,
归并排序的边界处理很容易出错,需要仔细再仔细。
0 0
- (程序员面试题)归并排序
- 程序员面试题精选--归并排序
- (程序员面试题)冒泡排序
- (程序员面试题)选择排序
- (程序员面试题)插入排序
- (程序员面试题)快速排序
- [各种面试题] 链表归并排序
- 面试题76:单链表的归并排序
- 面试题:冒泡排序,选择排序,插入排序,快速排序,归并排序,堆排序
- 经典面试题分析之归并排序的实现(js实现)
- 将两个已排序的链表归并成一个链表(C++面试题)
- 数据结构-从归并排序到数组的逆序对数(微软面试题)
- 基于visual Studio2013解决面试题之1405归并排序
- 程序员面试题总结一:排序算法
- 归并排序(java机试题)
- 程序员面试题(二)
- 程序员面试题 (答案)
- 程序员面试题精选(1):把二元查找树转变成排序的双向链表
- VC++6.0中链接静态库的问题
- ArcGIS Silverlight保存图片时“内容保护”错误解决
- DEDECMS V5 常用统计SQL标签
- MFC笔记——GetSafeHwnd()和GetSafeHandle()的主要区别
- OMAP3630 Linux I2C总线驱动分析
- (程序员面试题)归并排序
- Android的bitmap和优化
- Android解决SuperNotCalledException
- c#设计模式- Proxy模式
- ICDE2013论文翻译草稿:CPU and Cache Efficient Management of Memory-Resident Databases
- 黑马程序员-关于异常的一些问题
- json
- 利用域控设置启动脚本统一更改客户端administrator密码和添加客户端本地管理员账号
- 设定JFreeChart柱子上面的颜色