归并排序
来源:互联网 发布:painter安装教程mac 编辑:程序博客网 时间:2024/05/22 23:47
归并排序
什么是归并排序:
- 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并排序的详细介绍:
- 归并排序的基础就是将两个有序数组内的数按照一定顺序合并起来。那么如何做到将两个数组合并呢?
- 这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。
- 然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。
- 代码实现。
//将有序数组a[]和b[]合并到c[]中void MemeryArray(int *a, int n, int *b, int m, int *c){ int x,y,z; x=y=z=0;while (x<n && y<m){if (a[x] < b[y])c[z++] = a[x++];elsec[z++] = b[y++]; }while (x < n)c[z++] = a[x++];while (y < m)c[z++] = b[y++];}
- 归并排序的思想是:
- 将一个数组分为两部分A,B。如果这两部分是有序的就将这两部分合并起来。
- 如果这两部分无序,就分别将每一部分在分为两部分,依次类推,不就排好了。
- 代码实现。
#include <stdio.h>#include <stdlib.h>void MergeArray(int *a,int left,int mid,int right){ int temp[100000]; int x,y,z; x=left,y=mid+1,z=0; while(x<=mid && y<=right) { if(a[x]<a[y]) temp[z++]=a[x++]; else temp[z++]=a[y++]; } while(x<=mid) temp[z++]=a[x++]; while(y<=right) temp[z++]=a[y++]; for(x=0;x<z;x++) a[left+x]=temp[x];}void MergeSort(int *a,int left,int right){ int mid; if(left<right) { mid=(left+right)/2; MergeSort(a,left,mid);//将右边排序 MergeSort(a,mid+1,right);//将左边排序 MergeArray(a,left,mid,right);//将左边右边合并 }}int main(){ int a[]={8,3,6,2,5,7,9,1,4,0}; MergeSort(a,0,9); for(int i=0;i<10;i++) printf("%d ",a[i]); return 0;}
1 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 再议【苹果、橘子】
- 每周前端知识整理(15.08.09)
- 黑马程序员——面向对象06(static、对象初始化、单例设计模式)
- linux下启动xampp
- 选择结构
- 归并排序
- hadoop-2.5.2 安装与配置
- iOS中nil,Nil,NULL的区别
- hdu 5391 (数论)
- 从左往右 从上往下 按层遍历 输出 树 二叉树
- 电脑显示U盘,但是读取不了
- FrameLayout中控件使用属性:layout_weight
- 归并排序 MergeSort
- 协议传值