分治算法排序(C++版)
2015-08-09 18:04
429 查看
分治排序:
把一个数组分成两个数组,然后在把这两个数组再各自分成两个数组,直到数组有两个数,然后比较这两个数,并且合并,排序。
![](http://img.blog.csdn.net/20150809175901332?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
就是上面这个样子 的。。
不说了上代码(c++版):
把一个数组分成两个数组,然后在把这两个数组再各自分成两个数组,直到数组有两个数,然后比较这两个数,并且合并,排序。
就是上面这个样子 的。。
不说了上代码(c++版):
/** * name:分治算法 * time:15/8/9 14:25 * environment: ubuntu 14.04,sublime text 3 */ #include <iostream> using namespace std; /* * 打印数组 */ void printArray(int array[],int length) { for (int i = 0; i < length; ++i) { cout << array[i] << endl; } } /* * 一个数组从中间分成两个有序数组 * 把这两个有序数组合并成一个有序数组 */ void merge(int (&array)[10],int first,int center,int end) { int n1 = center - first + 1; int n2 = end - center; int L[n1+1]; int R[n2+1]; for(int i = 0; i < n1; i++ ) { L[i] = array[first+i]; //得到前面一部分数组 } //printArray(L,n1); for(int j = 0; j < n2; j++ ) { R[j] = array[center+j+1]; //得到后面一部分数组 } //printArray(R,n2); L[n1] = 1000; //设置哨兵 R[n2] = 1000; //设置哨兵 //cout << "R[5] =" << R[4] << endl; int k1 = 0; int k2 = 0; for (int k = first; k <= end; ++k) //把得到的两个数组进行排序合并 { //cout << L[k1] <<endl; //cout << R[k2] <<endl; if(L[k1] <= R[k2]) { //cout << L[k1] <<endl; array[k] = L[k1]; //cout << array[k] << endl; //cout << "k1 =" << k1 << endl; k1 = k1 + 1; }else{ //cout << R[k2] <<endl; array[k] = R[k2]; //cout << array[k] << endl; //cout << "k2 =" << k2 << endl; k2 = k2 + 1; } //cout << array[k] <<endl; } //printArray(array,10); } /* * 分治算法 * 把一个数组从中间分成分开 * 然后进行排序 */ void merge_sort(int (&array)[10],int first,int end) //注意这个地方是(&array)[10] 有& { if(first < end){ int center = (first + end)/2; //得到中间数 merge_sort(array,first,center); merge_sort(array,center+1,end); merge(array,first,center,end); } } int main(int argc, char const *argv[]) { int array[10] = {0,6,1,2,3,7,8,9,4,5}; //merge(array,0,4,9); merge_sort(array,0,9); printArray(array,10); //int center = (0 + 9)/2; //cout << "center" << center << endl; //cout << "hello"; return 0; }
相关文章推荐
- [leetcode-85]Maximal Rectangle(c++)
- 插入排序(C++ 版)
- C语言 判断一个字符串是不是另一个旋转任意位所得
- C语言 喝汽水问题
- C语言标准库函数qsort排序的介绍与使用
- thrift cpp hello world
- C++第一个综合项目
- 对半搜索递归实现 C++
- C++实现基于IO复用模型的echo服务器
- c++使用应用框架
- C++那些细节--static关键字
- [leetcode-84]Largest Rectangle in Histogram(c++)
- C++(Qt)静态成员类undefined reference to “xxx”
- php调用c++程序例子
- C++ class与内存
- LeetCode #2 Add Two Numbers
- LeetCode #1 Two Sum
- C++中虚函数内存布局
- 读书笔记-C++PrimerPlus-8.2.6 对象、继承和引用10.2.5 修改实现
- C++函数模板 模板实例化、具体化