分治法举例之快速排序,归并排序
来源:互联网 发布:网络不文明行为 编辑:程序博客网 时间:2024/06/03 19:35
个人理解(分治就是将问题不断地通过递归细化,然后将小的问题进行解决)
运用分治策略解决的问题一般来说具有以下特点:
1、原问题可以分解为多个子问题
这些子问题与原问题相比,只是问题的规模有所降低,其结构和求解方法与原问题相同或相似。
2、原问题在分解过程中,递归地求解子问题
由于递归都必须有一个终止条件,因此,当分解后的子问题规模足够小时,应能够直接求解。
3、在求解并得到各个子问题的解后
应能够采用某种方式、方法合并或构造出原问题的解。
不难发现,在分治策略中,由于子问题与原问题在结构和解法上的相似性,用分治方法解决的问题,大都采用了递归的形式。在各种排序方法中,如归[1] 并排序、堆排序、快速排序等,都存在有分治的思想[1] 。
1.快速排序(找到目标点,将其分解成一块一块的进行排序)
代码:
#include <iostream>#include <algorithm>#include <cstring>using namespace std;int swap(int a[],int i,int j){ int temp=a[i]; a[i]=a[j]; a[j]=temp;}int partition(int a[],int l,int r){ int i=l; int j=r+1; int x=a[l]; while(true){ while(a[++i]<x);//从左到有扫描,直到找出一个大于等于x while(a[--j]>x);//从右向左,到到一个小于等于 if(i>=j) break;//如果i值大于j值则break swap(a,i,j); } a[l]=a[j]; a[j]=x; return j;}void quickSort(int a[],int l,int r)//快速排序,其实是一种递归分治的思想{ if(l<r){//l>=r就没有排序的意义了 int mid=partition(a,l,r); quickSort(a,l,mid-1); quickSort(a,mid+1,r); }}int main(){ int a[1000]; int x; cin>>x; for(int i=1;i<=x;i++) cin>>a[i]; quickSort(a,1,x); for(int i=1;i<=x;i++) cout<<a[i]<<" ";}
阅读全文
0 0
- 分治法举例之快速排序,归并排序
- 分治之归并,快速排序
- 分治法(归并排序、快速排序)
- 【算法】分治法(快速排序,归并排序)
- 分治法之归并排序
- 分治法之归并排序
- 分治法之归并排序
- 分治法之归并排序
- 分治法之归并排序
- 分治法,归并排序
- 分治法-归并排序
- 分治法-归并排序
- 归并排序-分治法
- 分治法 - 归并排序
- 分治法--归并排序
- 归并排序 分治法
- 归并排序--分治法
- 分治法 & 归并排序
- Mybaits--动态拼接SQL语句之常用标签(包含一对多双向配置所用标签)
- 同步复位和异步复位的比较
- java复用类
- [HDU](1576) A/B ----扩展欧几里德(数论)
- apt-cache 的简单
- 分治法举例之快速排序,归并排序
- 一步一步实现 iOS 微信自动抢红包(非越狱)
- Android TextView设置阴影效果
- gulp详细入门教程
- 记录第一个JavaWeb项目过程 阿里云服务器+Tomcat9.0+jdk1.8
- Kotlin开发环境搭建
- C++ Primer 第5版--练习12.6
- material风格的图案解锁控件
- Apache配置不同域名指向不同的目录