归并排序
来源:互联网 发布:好玩的c语言小程序 编辑:程序博客网 时间:2024/06/04 18:23
归并排序的主体思想就是先对半拆分,直到拆成只有一个元素(一个元素必然有序);然后再逐层合并,合并有序的数组。
C语言实现:
/**实现归并排序的函数,主题思想是先拆分,然后合并有序序列*params:* arr:需要排序的数组* reg:装载临时序列的数组* start:子序列的起始位置* end:子序列的终止位置*/void merge_solve(int arr[], int reg[], int start, int end){ if(start >= end) //仅有一个元素或者无元素时返回 return; int len = end - start; //表示尾首之间元素个数 int mid = start + (len / 2); //中间元素 //截成两部分 int start1 = start; int end1 = mid; int start2 = mid + 1; int end2 = end; merge_solve(arr, reg, start1, end1); //先分开,后合并 merge_solve(arr, reg, start2, end2); int k = start; //合并两个已经有序的序列 while(start1 <= end1 && start2 <= end2){ reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++]; //赋值较小者 } //如果剩余的是前半部分,则用其填满reg的后面 while(start1 <= end1){ reg[k++] = arr[start1++]; } //如果剩余的是后半部分 while(start2 <= end2){ reg[k++] = arr[start2++]; } for(k = start; k <= end; k++) //将结果传回arr,便于递归 arr[k] = reg[k];}int main(){ int A[9] = {6, 9, 2, 12, 75, 96, 45, 32, 2}; int B[9]; merge_solve(A, B, 0, 8); for(int i = 0; i < 9; i++) printf("%d ", A[i]); printf("\n"); return 0;}
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 行人重识别综述(Person Re-identification: Past, Present and Future)
- 探讨UnsupportedOperationException的原因及解决方案
- Ubuntu下安装Qt的时arm版本的编译配置问题:The tslib functionality test failed!
- 安装Elasticsearch-servicewrapper插件
- 百度地图api新手尝试,个性化定制,查询定位
- 归并排序
- 深度学习py-faster-rcnn/Qt5.8工作环境搭建教程
- Object-Oriented Programming Concepts——面向对象编程的一些概念
- mysql error 1146错误解决办法
- 论文_阅读笔记_基于机器视觉的水稻秧苗图像分割
- howland 电流源
- MySql数据库常用DDL语句 | 黄乔国PHP
- 如何利用Ajax下载文件
- 剑指offer:第一个只出现一次的字符