数据结构快速排序非递归实现
Posted Bitdancing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构快速排序非递归实现相关的知识,希望对你有一定的参考价值。
常见的排序算法有以上八种,点击专栏就可以看其他排序算法,感兴趣的朋友们不妨点个收藏专栏。 ღ( ´・ᴗ・` )比心
快速排序的非递归实现可以使用 队列 和 栈进行。使用 队列 类似于 二叉树的层序遍历;使用 栈 类似于 二叉树的前序遍历。
本文采用栈进行非递归实现。
解题思想
根据栈先入后出的特点,用栈实现快速排序非递归分为以下过程:
- 右区间先入栈
- 左区间入栈,再取出栈顶
- 然后再右区间、左区间依次入栈,出左区间,直到栈为空。
图解过程
在一次单趟排序后,右区间、左区间依次入栈。
栈中数据:
取栈顶元素,进行单趟排序,依次压入右区间和左区间。
依次循环,直到左右区间不满足条件。
程序代码
void QuickSortNonR(int* a, int left, int right)
// 栈
ST st;
StackInit(&st);
StackPush(&st, left);
StackPush(&st, right);
while (!StackEmpty(&st))
int end = StackTop(&st);
StackPop(&st);
int begin = StackTop(&st);
StackPop(&st);
// 单趟排序
int keyi = PartSort3(a, begin, end);
// 先入右区间
if (keyi + 1 < end)
StackPush(&st, keyi + 1);
StackPush(&st, end);
// 再入左区间
if (begin < keyi - 1)
StackPush(&st, begin);
StackPush(&st, keyi - 1);
StackDestroy(&st);
注:此处栈是用先前用C自己实现的栈功能。
以上是关于数据结构快速排序非递归实现的主要内容,如果未能解决你的问题,请参考以下文章