归并排序
来源:互联网 发布:美股行情软件下载 编辑:程序博客网 时间:2024/05/24 01:42
归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
//利用啦分治的思想#include <stdio.h>#include <stdlib.h>void Moerage(int a[], int b[], int heard, int moiety, int end) { int i, j, k; i = heard;//代表的是传过来的数组的分成两份左边份的第一个数 j = moiety + 1;//代表的就是右边那份的第一位 k = heard; /*三个while的作用就是分别把两个数组的第一位到最后一位进行一一比较把从小到大的数字依次存入数组b[]中*/ while (i < moiety + 1 && j < end + 1) { if (a[i]>a[j]) { b[k] = a[j]; j++; } else { b[k] = a[i]; i++; } k++; } /*这里的两个while是把i开始或j开始的数组中比较后剩余的数据全部接着存入b[]中*/ while (i < moiety + 1) { b[k] = a[i]; k++, i++; } while (j < end + 1) { b[k] = a[j]; k++, j++; } /*将数据移入a[]数组中为下一次的递归做准备,b[]数组其实只是交换时的容器,每一次的递归数组还是以a[]数组为主来二分*/ for (i = heard; i < end + 1; i++) { a[i] = b[i]; }}void Interior(int a[], int b[], int heard, int end) { int moiety; if (heard < end) { moiety = (heard + end) / 2;//将数组分成两份 Interior(a, b, heard, moiety);//递归调用,一直将分成两份的前一个继续分成两个 Interior(a, b, moiety + 1, end);//递归调用,一直将分成两份的后一个继续分成两个 Moerage(a, b, heard, moiety, end);//将分成的数组进行排序 }}int main() { int i, n; int *a; int *b; printf("输入需要比较的数的个数:\n"); scanf("%d", &n); a = (int *)malloc(sizeof(int) * n); printf("输入%d个数字:\n", n); for (i = 0; i < n; i++) scanf("%d", &a[i]); b = (int *)malloc(sizeof(int)*n); Interior(a, b, 0, n - 1); printf("排序后的序列:"); for (i = 0; i < n; i++) if (i < n - 1) printf("%d,", a[i]); else printf("%d", a[i]); return 0;}
结果截图
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 第二章:渲染流水线(1)
- go编译静态文件
- log4j.xml简单配置实现在控制台打印sql执行语句
- python第三方库-pygal绘图功能介绍1-线图
- eclipse部署到tomcat的安装目录下的webapps中
- 归并排序
- js中使用delete运算符无法删除的情况
- SpringMVC 常用注解(个人笔记)
- 批量xml格式文件按字段顺序转json文件
- 第三周 【项目 4
- 菜鸟先飞之jAVA_异常
- Quartus_II_13.1c (64-bit)与仿真器的安装与破解
- 第四周 建立单链表算法库
- AVA技术路线图