利用栈非递归实现块排

Posted 每天学习一点点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用栈非递归实现块排相关的知识,希望对你有一定的参考价值。

递归实现块排:快速排序+随机快排

 

非递归实现块排具体思路如下图:

 

# -*- coding:utf-8 -*-
def quickSort(list):
    stack=[0]
    stack.append(len(list)-1)
    #利用栈存储下标
    while stack:
        j=stack.pop()
        i=stack.pop()
        mid=sort(i,j,list)
        if mid>i+1:
            stack.append(i)
            stack.append(mid-1)
        if mid<j-1:
            stack.append(mid+1)
            stack.append(j)
        # print stack
#一次排序,返回下标
def sort(low,hight,list):
    if (low>hight):
        return
    j=hight
    i=low
    temp=list[low]
    while i!=j:
        while list[j]>=temp and i<j:
            j-=1
        while list[i]<=temp and i<j:
            i+=1
        if i<j:
            k=list[i]
            list[i]=list[j]
            list[j]=k
    list[low]=list[i]
    list[i]=temp
    print list
    return i
list=[5,8,9,2,1,9,6,5]
quickSort(list)
print list

 

以上是关于利用栈非递归实现块排的主要内容,如果未能解决你的问题,请参考以下文章

二叉树遍历的非递归

java数据结构之二叉树遍历的非递归实现

JavaScript - 代码片段,Snippets,Gist

急求matlab复数矩阵QR分解代码我知道matlab本身有qr函数 但是我想知道利用householder变换递归实现的原理。

Notepad++编辑器——Verilog代码片段直接编译

C#属性: 利用set实现递归