c++实现归并排序
2016-03-26 11:45
489 查看
#include <iostream> #include <algorithm> #include <string> using namespace std; int arr[100]; int n; //排序 //归并排序 左排序右排序,归并(将两边最小的元素复制到原数组) void merge(int arr[],int l,int mid,int r); void mergeSort(int array[],int l,int r){ if(l<r){ int mid=(l+r)/2; mergeSort(array,l,mid); mergeSort(array,mid+1,r); merge(array,l,mid,r); } } void merge(int arr[],int l,int mid,int r){ int helperl=l; int helperr=mid+1; int helper[100]; for(int i=0;i<n;i++){ helper[i]=arr[i]; } int k=l; while(helperl<=mid&&helperr<=r) { if(helper[helperl]<=helper[helperr]){ arr[k]=helper[helperl]; helperl++; }else { arr[k]=helper[helperr]; helperr++; } k++; } for(int i=0;i<=mid-helperl;i++){ arr[k+i]=helper[helperl+i]; } } int main(){ cin>>n; for(int i=0;i<n;i++){ cin>>arr[i]; } mergeSort(arr,0,n-1); for(int i=0;i<n;i++){ cout<<arr[i]<<" "; } cout<<endl; return 0; }
来自程序员面试金典。
递归实现数组的归并排序。归并排序分两步,划分,归并。归并阶段创建辅助数组,将左半和右半最小的数依次写回原数组。
相关文章推荐
- C语言程序设计,实验报告程序
- C++中const用法总结
- 由find_char()函数所想到的
- c语言:双向循环链表的实现
- 在C++中使用sizeof
- C语言结构体变量字节对齐问题总结
- 计蒜客|C++程序设计|判断质数
- 线索二叉树的原理以及创建和遍历(c++)
- 设计模式--建造者模式C++实现
- 计蒜客|C++程序设计|简单斐波那契
- C++之:类对象内存对齐
- 学习 C++能带给我们什么
- C&&C++ 经典书籍
- C++精进篇(十)之―封装、继承、多态
- c语言函数指针
- C++精进篇(九)之―继承及经典示例
- C++第二次作业
- C++精进篇(八)之―函数重定义、重载、重写
- C++精进篇(七)之―操作符重载
- C++精进篇(六)之― Vector、iterator、Array