快速排序的递归和非递归实现
来源:互联网 发布:淘宝店侦探软件下载 编辑:程序博客网 时间:2024/05/21 15:46
首先参考《递归如何转换为非递归》,然后根据文中的思想将递归快排转换为非递归快排。
先来看看递归快速排序的代码:
/*以递归的方式实现快速排序*/void quick_sort(int array[],int left,int right){ if(left>=right) return ; int key = array[left]; int low = left; int high = right; while(low<high){ while(low<high && array[high]>=key) high--; array[low] = array[high]; while(low<high && array[low]<key) low++; array[high] = array[low]; } array[low] = key; quick_sort1(array,left,low-1); quick_sort1(array,low+1,right);}
非递归的快速排序代码:
/*非递归形式的快速排序*/typedef struct LOCATION{ int left; int right;}location;void quick_sort(int array[],int left,int right){ location loc; stack<location> loc_stack; int key; int low,high; loc.left = left; loc.right = right; key = array[left]; low =left; high =right; loc_stack.push(loc); while(!loc_stack.empty()){ loc = loc_stack.top(); loc_stack.pop(); low = loc.left; high = loc.right; key = array[low]; while(low<high){ while(low<high && array[high]>=key) high--; array[low] = array[high]; while(low<high && array[low]<key) low++; array[high] = array[low]; } array[low] = key; if(low+1 < loc.right){/*不满足递归结束条件*/ location tmp; tmp.left = low+1; tmp.right = loc.right; loc_stack.push(tmp); } if(loc.left < low-1){/*不满足递归结束条件*/ location tmp; tmp.left = loc.left; tmp.right = low-1; loc_stack.push(tmp); } }}
0 0
- 快速排序。冒泡排序递归和非递归的实现
- 快速排序的递归和非递归的实现
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现
- 快速排序-递归和非递归的实现
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现方法
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现
- 快速排序的递归和非递归实现
- 快速排序、冒泡排序、堆排序、shell排序的递归和非递归实现
- 快速排序算法递归和非递归实现 [# 29]
- Java 实现快速排序 递归和非递归
- Java实现快速排序递归和非递归
- 快速排序的非递归实现
- USACO
- Stereo Processing by Semi-Global Matching and Mutual Information 论文翻译
- 022-利用 Docker Hub 与 GitHub 来完成镜像的自动构建
- 023-删除Docker镜像
- SIFT特征提取原理
- 快速排序的递归和非递归实现
- 024-构建私有的 Docker Registry
- 算法提高 分分钟的碎碎念
- 025-启动 docker 容器时,使用 -v 选项来挂载卷
- 如何关闭135、137、138、139、445端口
- 排序算法总结(一)
- 单链表的反转
- 026-第一本Docker书(修订版)第106页的Dockerfile构建出错
- linux下LVM相关知识(动态增减LVM,快照功能)的总结