算导--7-2-b.构造新的PARTITION'(A, p, r)
2016-03-15 22:48
204 查看
修改PARTITION(A, p, r)来构造一个新的PARTITION'(A, p, r),他排列A[p..r]的元素,返回值是两个数组下标q和t,其中,p<=q<=t<=r,且有A[p..q-1]的中的元素都小于A[q],A[q..t]的元素都相等,A[t+1..r]的中的元素都大于A[q]。
时间复杂度是O(r-p)。
伪代码如下:
![](http://img.blog.csdn.net/20160315222449220?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
主要思想:若A[j]比A[p]小,则把目前标识与A[p]相等的值的最大下标加一处的值(第一个大于A[p]的值)放到原来A[j],目前标识与A[p]相等的值的最小下标的值(即第一个等于A[p]的值)放到目前标识与A[p]相等的值的最大下标加一处,然后把原来A[j]的值放到原来A[i]处,i和h一起向右移动;若A[j]和A[p]一样大,则目前标识与A[p]相等的值的最大下标加一处的值(第一个大于A[p]的值)与A[j]交换,h后移一位;若A[j]比A[p]大,把j后移一位。
时间复杂度是O(r-p)。
伪代码如下:
主要思想:若A[j]比A[p]小,则把目前标识与A[p]相等的值的最大下标加一处的值(第一个大于A[p]的值)放到原来A[j],目前标识与A[p]相等的值的最小下标的值(即第一个等于A[p]的值)放到目前标识与A[p]相等的值的最大下标加一处,然后把原来A[j]的值放到原来A[i]处,i和h一起向右移动;若A[j]和A[p]一样大,则目前标识与A[p]相等的值的最大下标加一处的值(第一个大于A[p]的值)与A[j]交换,h后移一位;若A[j]比A[p]大,把j后移一位。
相关文章推荐
- Struts2 中 模板驱动ModelDriven
- JavaWeb不用选择结构直接引用资源文件
- JNI 实战全面解析
- Android性能优化系列
- JS_原型链
- Verilog阶乘器
- Eclipse快捷键Assign to local variable
- SVM算法教科书(一)
- 高斯分布_三种类别
- Block传值原理
- JS_原型
- 学习和使用STL
- iOS--页面间的代理传值(属性、代理(委托)、代码块、单例、通知)
- 简单的IO流应用-将文件夹中的所有文件拷贝到指定目录下
- lua相关
- html上传图片之前在网页预览实现
- 105. Construct Binary Tree from Preorder and Inorder Traversal LeetCode
- Java关键字static、final使用小结
- jquery基础篇(一)— —选择器
- iOS之页面传值