MergeSort归并排序
来源:互联网 发布:java 设备数据对接 编辑:程序博客网 时间:2024/05/04 19:55
MergeSort
描述:MergeSort ( a , b)
MergeSort ( a, ( a + b ) / 2 ); // 把问题分为两部分,先对数列的前一半进行排序,然后对后一半排序
MergeSort ( a + b ) / 2 , b );
Merge ( a, ( a + b ) / 2 , b ); //合并两个已排序的数列
一直递归到子序列中只有一个数。
#include<stdio.h>int a[1000];void merge(int x,int mid,int y) //是用插入排序的方式来归并两个子序列{int i,j,k;int b[1000];for(i=x,j=mid+1,k=0;i<=mid&&j<=y;k++){if(a[i]>a[j])b[k]=a[i++];elseb[k]=a[j++];}/*退出循环时,i>mid或j>y*/if(i>mid) //当i==mid或j==y 时,还需进行操作,此时a[mid]或a[y]中的值还未放到b[]中!!!{for(;j<=y;j++,k++)b[k]=a[j];}else{for(;i<=mid;i++,k++)b[k]=a[i];}for(i=x,k=0;i<=y;i++,k++)a[i]=b[k];}void mergesort(int x,int y)/*比较有意思的地方,通常要传入数组我都是写 a[n],其实也可以只写数组名,以指针的方式传入*/{int t,k;int i,j;if(x<y) //此处要注意啦!!!这是递归的条件,最初写的程序里没有这个条件,结果无限除2,死循环直到栈溢出……!!{mergesort(x,(x+y)/2);mergesort((x+y)/2+1,y);merge(x,(x+y)/2,y);}}int main(){int n,i;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);mergesort(0,n-1);for(i=0;i<n-1;i++)printf("%d ",a[i]);printf("%d\n",a[i]);return 0;}
- mergesort 归并排序
- mergesort归并排序
- MergeSort归并排序
- 归并排序--MergeSort
- MergeSort归并排序
- 归并排序(MergeSort)
- Mergesort-归并排序
- 归并排序算法 MergeSort
- 归并排序--MergeSort
- mergeSort - 归并排序
- 归并排序 MergeSort
- MergeSort归并排序
- 归并排序 MergeSort
- 归并排序(MergeSort)
- Mergesort-归并排序
- 【MergeSort】归并排序
- 归并排序(MergeSort)
- mergesort归并排序
- 数据中心培训认证Top10
- 惠普会不会放弃webos? amazons会不会收购?
- qt多线程的简单例子
- socket编程与线程模型
- C#发现之旅第一讲 C#-XML开发
- MergeSort归并排序
- 多线程--常用操作方法
- 固态继电器及其使用
- 对虚拟函数动态绑定的一点认识
- 用Iptables实现Linux的防火墙功能
- Android2.2 API中文文档——View Android View的xml属性
- vs2010 MSDN文档安装方法(转自:http://www.ljf.cn/archives/91.aspx)
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用1
- poj 1665 Biker's Trip Odometer