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

转载 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;  
    }  

快排的递归和非递归版本

1.递归有3种版本,下面值列出两种,另一种其实跟列出的两种的一个变种。   (1)算导版本(伪代码): (2)前后依次覆盖版本: #include #include #include #inc...
  • Hadas_Wang
  • Hadas_Wang
  • 2016年03月17日 21:10
  • 2167

快排 递归与非递归实现 优化

快排,面试题中出现概率最高的一道,甚至没有之一。python实现,直接上代码def getMiddle(list,low,high): tmp = list[low] while(lo...
  • bitcarmanlee
  • bitcarmanlee
  • 2016年06月11日 22:15
  • 2445

java实现递归快排和非递归快排

package sort; import java.util.Random; public class QuickSort { public static Random random = new...
  • chenzhichao
  • chenzhichao
  • 2016年05月28日 18:23
  • 610

快排算法(递归/非递归)

最近看了一篇文章,介绍递归转非递归的方法,主要是通过stack的数据结构模拟递归函数堆栈的层次调用(后进先出,最里层-->最外层,层层弹出),排序算法很多是通过递归来实现的,这里照葫芦画瓢,实现一下非...
  • kai_ITthinker
  • kai_ITthinker
  • 2017年03月02日 15:26
  • 563

Java实现快速排序递归和非递归

/** * 快速排序 * */ public class QuickSort{ /** * 递归一 * */ public static void sort1(int[] arr...
  • mwb1219
  • mwb1219
  • 2016年04月27日 18:22
  • 529

[算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~

基础总结一下,快速排序的步骤: 1、找到一个key值(就是数组第一个值),先从右到左找,找到一个比它小的值,记录下标。 2、然后从左往右找,找到一个比它大的值,记录下标。 3、交换找到的两个数字...
  • haolvshiqi
  • haolvshiqi
  • 2017年01月09日 17:06
  • 2095

快速排序的非递归实现

华夏35度 Data Mining,NLP,Search Engine 快速排序的非递归实现 首先说明一下快速排序是对冒泡排序的改进。为什么这么说呢?想一下冒泡排序,它把...
  • pi9nc
  • pi9nc
  • 2013年09月26日 16:31
  • 22183

快速排序 的原理及其java实现(递归与非递归)

快速排序 的原理及其java实现(递归与非递归)
  • mine_song
  • mine_song
  • 2017年03月20日 09:25
  • 401

快速排序的两种实现思路和非递归实现--C++实现

思路一:        第一种是根据算法导论上的思想:取数组的最后一个元素为主元,i初始化为最低位元素的前一个位置,j指向遍历数组中待排序的元素,当j所指元素比主元小的时候i= i + 1,然后交换...
  • u012691335
  • u012691335
  • 2016年09月14日 15:00
  • 737

快速排序的递归形式与非递归形式(C++版)

本文是基于C++语言对快速排序进行递归与非递归形式的实现,希望大家共同进步...
  • u012597860
  • u012597860
  • 2016年04月21日 18:55
  • 264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【数据结构】快排 【递归&&非递归】
举报原因:
原因补充:

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