归并排序与快速排序模板与图解笔记(转载)
https://blog.csdn.net/zpznba/article/details/83745205 C++ 归并排序与快速排序 2018年11月05日 15:15:31 zpznba 阅读数 948 归并排序: 【算法逻辑】 归并的思路(分治)是把一个大问题a拆解成两个小问题b和c,解决了两个子问题再整合一下,就解决了原问题。用递归的方法,先分解再合并(分治是一种解决问题的处理思想,递归是一种编程技巧,这两者并不冲突): 【代码实现】 # include <iostream> using namespace std; void Merge ( int arr[], int l, int q, int r){ int n=r-l+ 1; //临时数组存合并后的有序序列 int* tmp= new int[n]; int i= 0; int left=l; int right=q+ 1; while(left<=q && right<=r) tmp[i++] = arr[left]<= arr[right]?arr[left++]:arr[right++]; while(left<=q) tmp[i++]=arr[left++]; while(right<=r) tmp[i++]=arr[right++]; for( int j= 0;j<n;++j) arr[l+j]=tmp