快排的递归和非递归-创新互联

常用的快排都是用递归写的,因为比较简单,但是可以用栈来实现非递归的快排。

鼎城ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

第一种是递归的快排

#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int quick(int a[],int i ,int j)
{
    int tmp=0,key,b=0;
    int im,jm;
    im=i;
    jm=j;
    key=a[i];
    if(i>j)
        return ;    
    while(i < j){
        while(a[j] > key && i< j)
            j--;
        a[i]=a[j];
        while(a[i] <= key && i < j)
        i++;
        a[j]=a[i];
    }                                    //这块和非递归是不同的,这里用的是覆盖。
    a[i]=key;
    quick(a,im,i-1);
    quick(a,i+1,jm);
    return 0;
}

int *rand_list(int *nums, int len, int range)        //产生随机数
{
    srand(time(NULL));
    int i = 0;
    for(i = 0; i< len; i++)
        nums[i] = rand()%range;
    return nums;
}

int main()
{
    int a[100];
    rand_list(a,100,100);
    int i=0;
    quick(a,0,99);
    for(i=0;i<100;i++)
        printf("%d ",a[i]);
    printf("\n");
}

    第二种是非递归

#include<stdio.h>
#define max 20

int sl[max];
int sr[max];
int top =0;

void push(int a, int b)
{
    sl[top] = a;
    sr[top] = b;
    top++;
}

void pop(int* p1, int* p2)
{
    top--;
    *p1 = sl[top];
    *p2 = sr[top];
}

void quick(int* a ,int l,int r)
{
    int al,ar,point,tmp;
    push(l,r);
    while(top){
        pop(&l,&r);
        al = l;
        ar = r;    
        point = a[(al+ar)/2];
        while(al<ar){
            while(a[al] < point && al < ar)
                al++;
            while(a[ar] > point && al < ar)
                ar--;
            if(al <= ar){
                tmp = a[al];
                a[al] = a[ar];
                a[ar] = tmp;
                al++;
                ar--;
            }
        }
        if(l < ar)            //这块和递归是不同的,要注意,这里用的是相互交换
            push(l,ar);
        if(al < r)
            push(al,r);
    }
}

int main()
{
    int a[10] ={2,4,1,8,3,5,9,7,6,0};
    quick(a,0,9);
    int i;
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    printf("\n");    
    return 0;
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

网页题目:快排的递归和非递归-创新互联
分享网址:https://www.cdcxhl.com/article30/dopeso.html

成都网站建设公司_创新互联,为您提供企业网站制作网站营销网站内链虚拟主机网站收录网页设计公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设