每日编程7之快速排序非递归版本
来源:互联网 发布:mac可以用搜狗输入法 编辑:程序博客网 时间:2024/05/16 07:25
递归算法转化为非递归实现的核心思想是"用栈来模式递归函数栈"。
实现主要考虑:入栈/出栈的逻辑
对于快速排序来说。。
栈元素包括,输入序列的左右下标,初始时将0,n-1
每次循环
取出栈顶元素(p,q),若q<=p即该段子序列只有0/1个元素,则此次循环结束
在该段元素序列中执行快速排序核心算法: 确定新的中间元素 i+1
将(p,i) 和 (i+1,q) 压栈
循环结束条件:栈为空
这个递归算法如此实现的基础是:任何二次递归之间没有重叠部分
相比较而言,动态规划的实现就需要一个表来存储所有的中间结果,以使重叠部分透明
实现核心代码:
int quickSort_nonRecur(float A[],int p,int q)
{
struct stack *ptr_s;
stack_declare(ptr_s);
elementType e = {p,q};
push(ptr_s,e);
while(!isStackEmpty(ptr_s))
{
pop(ptr_s,e);
if(e.left >= e.right)
continue;
float pivot = A[e.right];
int i = e.left-1;
int j;
for(j=e.left;j<e.right;j++)
if(A[j]<pivot) {SWAP(A[i+1],A[j]); i++;}
SWAP(A[i+1],A[e.right]);
push(ptr_s,element_create(e.left,i));
push(ptr_s,element_create(i+2,e.right));
}
}
实现中的一些问题:
C语言中struct不能直接赋值,也就是说struct stack s1=s2;语法错误
我错了,结构体居然可以直接赋值,做了好多无聊的事情。。。
- 每日编程7之快速排序非递归版本
- 每日编程3之快速排序随机化版本
- 非递归版本的快速排序
- 快速排序的非递归版本
- 快速排序之递归与非递归
- 每日编程10之二叉树的先序遍历的非递归版本
- 每日编程2之快速排序
- 快速排序 归并排序的非递归版本 备忘
- 快速排序----非递归
- 快速排序 非递归
- 非递归快速排序
- 快速排序 非递归
- 快速排序非递归
- 快速排序之递归与非递归写法
- 快速排序实现之递归与非递归
- 【数据结构笔记】7:非递归快速排序
- 每日编程6之单链表反转递归版本
- 无聊写排序之 ---- 快速排序(QuickSort) 非递归实现
- iOS系统网络抓包方法
- java网络编程(一)InetAddress和NetworkInterface
- CEAA教程:A Very In Depth Tutorial on Auto Assembler(三)
- Failed to find an AVD compatible with target 'Android 1.5'. Launch aborted.
- mysql表的复制
- 每日编程7之快速排序非递归版本
- 居中解析margin:0 auto;
- Android隐藏状态栏和标题栏,相当于全屏效果
- Android 2.3 SD卡挂载流程浅析(四)
- CEAA教程:A Very In Depth Tutorial on Auto Assembler(四)
- 如何处理php中敏感词和谐
- Android 2.3 SD卡挂载流程浅析(五)
- 网页中JS对SEO的影响及解决方法
- log4j的使用