排序算法-------归并排序
2011-10-03 12:39
218 查看
基本思想:将元素集合分成2个集合,对每个集合单独分类,然后将已分类的两个序列归并成一个含有n个元素的分类好的序列。这种思想是典型的分治法的设计思想。
归并排序
归并排序
#include <iostream> using namespace std; //元素交换 void swap(int &a,int &b) { int temp=a; a=b; b=temp; } /*/////////////////////////////////////////////// 归并排序 */ void Merge(int *a,int low,int mid,int high) { int b[100]; int l=low; int h=mid+1; int i=low; int j; while( l<=mid && h<=high ) //当分成的独立的两部分各自未超过范围时,比较元素,赋值给数组b中相应的元素 { if(a[l]<=a[h]) b[i++]=a[l++]; else b[i++]=a[h++]; } if(l>mid) //当超出范围,判断是哪一部分先超出,然后将剩余部分直接添加到数组b中 for(j=h;j<=high;j++) b[i++]=a[j]; if(h>high) for(j=l;j<=mid;j++) b[i++]=a[j]; for(j=low;j<=high;j++) //重写数组a中元素 a[j]=b[j]; } void MergeSort(int *a,int low,int high) //递归,合并排序 { if(low<high) { int mid=(low+high)/2; MergeSort(a,low,mid); MergeSort(a,mid+1,high); Merge(a,low,mid,high); } } ///////////////////////////////////////////////// int main() { int n,i,a[20]; cout<<"请输入数组元素n:"<<endl; cin>>n; cout<<"请输入"<<n<<"个元素:"<<endl; for(i=0;i<n;i++) cin>>a[i]; MergeSort(a,0,n-1); for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; return 0; }
相关文章推荐
- Java实现-高效排序算法之归并排序
- 复习数据结构:排序算法(四)——归并排序
- 排序序列排序算法总结(二)——快速排序、归并排序
- 排序算法--冒泡排序,归并排序,快速排序
- 五十道编程小题目 --- 28 八大排序算法 java 之 07归并排序
- 排序算法—归并排序
- Java排序算法——归并排序
- 排序算法五—归并排序
- 使用C#详解常用排序算法(三):归并排序(Merge Sort)
- 排序算法(Java语言)——归并排序
- PHP实现排序算法----归并排序(Merging Sort)
- 常见的五类排序算法图解和实现(归并类:二路归并排序)
- 排序算法详解【归并排序-Merge_Sort】
- 图解排序算法(四)之归并排序
- 排序算法——归并排序
- 排序算法之归并排序
- 8)排序④排序算法之归并排序
- 排序算法之归并排序
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- 数据结构-排序算法详解(插入排序,希尔排序,堆排序,归并排序,快速排序,桶式排序)