数据结构算法之快速排序

本文详细介绍了快速排序算法的基本思想和实现步骤,并提供了一个具体的C语言实现示例。通过递归地选择基准元素并调整序列,使得基准左侧的元素都小于基准,右侧的元素都大于基准,从而实现序列的排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序的基本思路是从n个待排序的记录中任取一个记录,(不妨取第一个元素)设法将该记录放置于排序后他会最终应放的位置。使它前面的记录排序码都小于它的值,是它后面的都大于它的值。然后对前后两部分都重复这个过程。其基本思想是算法中的分治思想。

为了节省空间,可以不另开辟一个新的数组存储区,先将第1个记录暂存,设为想,这样就空出了第一个元素的位置,从第n个元素起找一个排序码不大于x的记录,将它放在第一个位置,这样,后面又空出来一个位置,从第二个元素起找一个排序码大于x的元素,将它放在后面空出的位置,重复这种两边向中间逼近的过程,可以把所有大于x的数放在x的后面。把所有小于x的数放在前面,最后当两边逼近同一位置时,便将暂存的x放于该位置。

对前后两个部分递归使用上述操作,排序即可完成。

附代码如下:

#include <stdio.h>
#include <stdlib.h>
void sort(int *a,int low,int hig)
{
    int i,j;
    if(low<hig)
    {
        i=low;
        j=hig;
        a[0]=a[i];
        do
        {
            while(a[j]>a[0]&&i<j)j--;
            if(i<j)
            {
               a[i]=a[j];i++;
            }
            while(a[i]<a[0]&&i<j)i++;
            if(i<j)
            {
                a[j]=a[i];j--;
            }
        }while(i!=j);
        a[i]=a[0];
        sort(a,low,i-1);
        sort(a,i+1,hig);
    }
}

int main()
{
    int i;
    int low,hig;
    int a[11] = {8,3,10,9,2,4,3,6,8,11,7};

    low=1;hig=10;
    sort(a,low,hig);
    for(i=1;i<=10;i++)
    {
        printf("%3d",a[i]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值