快速排序-合并排序(分治法运用)
2015-07-13 15:32
375 查看
快速排序
合并排序
#include <iostream> using namespace std; #define N 10 int a ={3,3,56,7,4,4,3,2,2,3}; void swap(int i,int j); int partition(int begin,int end); void quicksort(int begin,int end); int main(){ quicksort(0,N-1); int i; for(i = 0; i < N; i++){ cout << a[i] << " "; } cout << endl; return 0; } void quicksort(int begin,int end){ int j; if(begin < end){ j=partition(begin,end); quicksort(begin,j-1); quicksort(j+1,end); } } int partition(int begin,int end){ int i = begin,j = end+1; do{ do{ i++; }while(a[i] < a[begin]); do{ j--; }while(a[j] > a[begin]); if(i<=j){ swap(i,j); } }while(i<=j); swap(begin,j); return j; } void swap(int i,int j){ int tmp; tmp = a[i]; a[i] = a[j]; a[j] = tmp; }
合并排序
/*归并排序*/ #include <iostream> using namespace std; #define N 10 int a ={1,2,3,93,5,6,39,8,4,9}; void merge_sort(int begin,int end,int a[]); void merge(int begin,int mid,int end); int main(){ merge_sort(0,N-1,a); int i; for(i = 0; i < N; i++){ cout << a[i] << " "; } cout << endl; return 0; } void merge_sort(int begin,int end,int a[]){ int m; if(begin < end){ m = (begin + end)/2; merge_sort(begin,m,a); merge_sort(m+1,end,a); merge(begin,m,end); } } void merge(int begin,int mid,int end){ int T ; int i = begin, j = mid+1,k = begin; while(i <= mid || j <= end){ if((j > end)||(i <= mid && a[i] <= a[j])){ T[k++] = a[i++]; } else{ T[k++] = a[j++]; } } for(i=begin,k=begin;k<=end;){ a[k++] = T[i++]; } }
相关文章推荐
- 训练:用gfsh执行常见的任务
- 生成一定数量的不重复随机数
- MySQL Community Server 5.6和MySQL Installer 5.6
- 【高斯消元】HYSBZ 1013 球形空间产生器sphere
- Cannot load hello library: java.lang.UnsatisfiedLinkError: /opt/wdh/jni/libhello.so: /opt/wdh/jni/li
- STL笔记之slist
- stl之hashtable
- 学习C++的记录
- InputStream加载不上文件问题
- What I have lived for
- 获取本机IP地址和MAC地址
- jQuery 让DIV显示后延时几秒后消失
- PHP微信红包的算法实现探讨
- INotifyPropertyChanged接口的PropertyChanged 事件
- 工作中常用shell之ssh登陆不用输入"yes"
- php实现的简单美国商品税计算函数
- GRE写作必备句型
- 派生类的构造函数和析构函数
- JNI进阶
- 在rails中pluck和select和collect区别