基础排序:快速排序

快速排序:

和归并排序一样,用了分治的思想,不过分的有些不同,归并排序是先把数组分的很小很小在进行简单的操作从而达到目的,也就是先分在排序,但是快速排序是先排序再分,我觉得快速排序把数字转来转去,其意思就是找到这个数在这个数组的位置,而且找到就不会变,有些像选择排序的意思,但是快速排序在比较的过程中没有为之后的操作做便利,快速排序不像选择排序那样固定的找,它把数分成了二类,原来选择排序每找一次只会在循环里减少一位的操作,但是快速排序直接每次减少了一半,而且运用了分治的方法后把选择排序要比较的有些浪费的操作大大减少;

#include<stdio.h>
void swap(int &x,int &y)
{
    int temp;
    temp=x;
    x=y;
    y=temp;
}
void pr(int a[],int l,int n)
{
    for(int i=l;i<=n;i++)
        printf("%d ",a[i]);
    printf("\n");

}
int px(int a[],int l,int r)
{
    int temp=a[l];
    int nl=l,nr=r;
    int flag1=1,flag2=0;
    int wz=l;
    while(nl<nr)
    {
        if(flag1)
            if(a[nr]>=temp)
                nr--;   
            else
            {
                flag2=1;
                flag1=0;
                a[wz]=a[nr];
                wz=nr;
                nl++;
                continue;   
            }
        if(flag2)
            if(a[nl]<=temp)
                nl++;
            else
            {
                flag1=1;
                flag2=0;
                a[wz]=a[nl];
                wz=nl;
                nr--;
                continue;

            }
    }
    a[nr]=temp;
    //  pr(a,l,r);
    return nr;


}




void pxf(int a[],int l,int r)
{
    if(l<r)
    {
        int w;
        w=px(a,l,r);
        pxf(a,l,w-1);
        pxf(a,w+1,r);
    }
}


int main()
{
    const int n=10;
    int a[n]={49, 38, 65, 97, 26, 13, 27, 49, 55, 4};
    pxf(a,0,n-1);
    pr(a,0,n-1);
    return 0;
 } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值