快速排序的递归和非递归实现
2017-05-13 13:15
495 查看
首先参考《递归如何转换为非递归》,然后根据文中的思想将递归快排转换为非递归快排。
先来看看递归快速排序的代码:
非递归的快速排序代码:
先来看看递归快速排序的代码:
/*以递归的方式实现快速排序*/ 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); } } }
相关文章推荐
- 快速排序的递归实现
- 快速排序的非递归实现
- 快速排序的递归和非递归实现
- 递归实现快速排序
- C++ 快速排序 递归实现
- 快速排序的递归实现
- (转的!)快速排序的递归与非递归实现。
- 快速排序, 传统递归实现, 非递归实现
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
- 快速排序非递归实现
- C/C++面试题(三) 推断二叉树、快速排序递归实现、递归判断数组递增
- 快速排序非递归实现
- 快速排序非递归c#实现
- 霍尔快速排序 非递归 C++实现
- 用栈来实现非递归快速排序。
- 快速排序的递归与非递归实现
- 快速排序非递归实现
- *快速排序,递归实现,短小精干版:*/
- 快速排序的非递归实现
- java 递归实现快速排序