用栈和队列实现快速排序算法

首先进行一次分裂,然后将分解后的两个子序列分别入栈(入队),接着循环检测栈(队列)是否为空,不为空,继续分裂,若为空,继续循环。可见这里是栈还是队列没有关系。
代码引用自快速排序的非递归实现

/**使用栈的非递归快速排序**/
template
void quicksort2(vector &vec,int low,int high){
    stack st;
    if(low

上诉引用文中关于冒泡和快速排序的说法也非常有意思。

首先说明一下快速排序是对冒泡排序的改进。为什么这么说呢?想一下冒泡排序,它把序列分成了两部分,前半部分无序,后半部分升序排列,并且后半部分的数都大于前半部的数。
由此可得到快速排序和冒泡排序的一些共同点:
都要经历n趟排序
每趟排序要经历O(n)次比较
都是后半部分元素比前半部大
而不同之处就在于冒泡排序的交换操作发生相邻的元素之间,即一趟排序可以要经过多次交换操作;快速排序的交换操作发生在间隔比较远的两个元素之间,一趟排序要经过交换操作次数会少一些。

你可能感兴趣的:(用栈和队列实现快速排序算法)