【数据结构】快排 【递归&&非递归】

转载 2016年08月30日 15:09:30
    //快排的递归  
    void quickSort1(int* root,int low,int high)  
    {  
        int pat=root[low];  
        if(low<high)  
        {  
            int i=low,j=high;  
            while(i<j)  
            {     
                while(i<j&&root[j]>pat)  
                    j--;  
                root[i]=root[j];  
      
      
                while(i<j&&root[i]<pat)  
                    i++;  
                root[j]=root[i];  
      
            }  
            root[i]=pat;  
            quickSort1(root,low,i-1);  
            quickSort1(root,i+1,high);  
        }  
          
    }  
      
    //快排的非递归   栈,相当于DFS
    int partion(int* root,int low,int high)  
    {  
        int part=root[low];  
        while(low<high)  
        {  
            while(low<high&&root[high]>part) high--;  
            root[low]=root[high];  
            while(low<high&&root[low]<part) low++;  
            root[high]=root[low];  
        }  
        root[low]=part;  
        return low;  
    }  
      
    void quickSort2(int* root,int low,int high)  
    {  
        stack<int> st;  
        int k;  
        if(low<high)  
        {  
            st.push(low);  
            st.push(high);  
            while(!st.empty())  
            {  
                int j=st.top();st.pop();  
                int i=st.top();st.pop();  
      
                k=partion(root,i,j);  
      
                if(i<k-1)  
                {  
                    st.push(i);  
                    st.push(k-1);  
                }  
                if(k+1<j)  
                {  
                    st.push(k+1);  
                    st.push(j);  
                }  
            }  
      
        }  
          
    }  
      
    int main()  
    {  
        int a[8]={4,2,6,7,9,5,1,3};  
        quickSort1(a,0,7);  
        //quickSort2(a,0,7);  
        int i;  
        for(i=0;i<8;i++)  
            cout<<a[i]<<"   ";  
        cout<<endl;  
        getchar();  
        return 0;  
    }  

相关文章推荐

数据结构-非递归遍历二叉树

  • 2017年11月16日 10:28
  • 216KB
  • 下载

数据结构之非递归解决0-1背包问题

很早前就想写博客记录下自己的学习路程, 就从今天开始写起把。那啥今天周末,大家好多人应该都出去玩了。 当然在寝室dota的也有拉,哈哈。 希望那些以爱好programming的大哥大姐大叔大婶小...

数据结构-非递归遍历二叉树

根据前序遍历访问的顺序,优先访问根结点,然后再分别访问左孩子和右孩子。即对于任一结点,其可看做是根结点,因此可以直接访问,访问完之后,若其左孩子不为空,按相同规则访问它的左子树;当访问其左子树时,再访...

数据结构——排序/搜索二叉树(非递归)的基本操作实现

什么是搜索二叉树:       二叉树(binary)是一种特殊的树。二叉树的每个节点最多只能有2个子节点:由于二叉树的子节点数目确定,所以可以直接采用上图方式在内存中实现。每个节点有一个左子节点(...

数据结构基础 背包问题(一) 之 非递归解

【问题描述】 “背包题目”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn,希望从N件物品中选择若干物品,所选物品的重量之和恰能放进该背包...

数据结构与算法分析笔记与总结(java实现)--二叉树2:非递归二叉树的序列打印练习题

数据结构与算法分析笔记与总结(java实现)--二叉树2:非递归二叉树的序列打印练习题...

先序非递归遍历二叉树解析——面试高频数据结构

一、基本概念 二叉树是笔试面试中高频数据结构。 而二叉树的遍历是解决一切二叉树题目的基础。因此,有必要熟练掌握二叉树的遍历方法,包括递归方法 和 非递归方法。 由于递归方法比较简单,因此,这里我...

C++数据结构之二叉树非递归操作

#include using namespace std; const int MaxSize = 100; template           //二叉树的结点结构 struct BiN...

“第一次亲密接触”--数据结构,迷宫的生成、走通(非递归)

也不知道说什么?直接看代码吧,之前上大二的时候做的一个数据结构的课程设计,按照老师给的做的。亮点就是迷宫自动生成,路线标注、输出步骤。在redhat中测试没有问题。   #include #incl...

【数据结构】Java实现二叉树遍历(非递归)

以二叉排序树来建立的一棵二叉树,然后用先序,中序,后序非递归遍历package DataStructure;import java.util.Stack; public class BinaryTr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【数据结构】快排 【递归&&非递归】
举报原因:
原因补充:

(最多只允许输入30个字)