快速排序算法

快速排序:找一个基准数(一般为第一个数),比它大的放在他左边,比它小的放在它右边,最后使它到它该到的位置,然后利用递归的方式使每个数都到它应该在的位置。

#include<stdio.h>
void qsort(int b[],int left,int right)
{
    int key;
    if(left<right)
    {
        int i=left;
        int j=right;
        int key=b[left];//以数组第一个数据作为关键数据(基准数)
        while(i<j)//直到i与j相等时,结束
        {
            while(i<j&&b[j]>=key)//从后面往前找,直到找到比关键数据小的或者i与j相等就结束
            {
                j--;
            }
            if(i<j)//排除掉前面while循环i=j的情况
                {b[i]=b[j];i++;}//比关键数据小的放在左边

            while(i<j&&b[i]<=key)//从前面往后找,直到找到比关键数大的或者i=j时结束
            {
                i++;
            }
            if(i<j)//排除掉前面while循环i=j的情况
                {b[j]=b[i];j--;}//比关键数据大的放在右边
        }
        b[i]=key;//让key到它应该在的位置
        qsort(b,left,i-1);//递归调用,使左边的数组排序
        qsort(b,i+1,right);//递归调用,使右边的数组排序
    }
}



int main()
{
    int a[10],n;
    printf("输入十个数\n");
    for(n=0;n<10;n++)
        scanf("%d",&a[n]);
    printf("--------排序前----------\n");
    for(n=0;n<10;n++)
        printf("%d\t",a[n]);
    printf("\n");
    qsort(a,0,9);
    printf("--------排序后---------\n");
    for(n=0;n<10;n++)
        printf("%d\t",a[n]);
    printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值