数据结构之快速排序

本文主要介绍快速排序算法,通过动图可粗略了解其结构。主要思路是将数组第一个数定为标记,从后往前和从前往后分别比较,将比标记数小或大的数进行位置转换。一次循环后,标记数左端的数比其小,右端的数比其大,再递归调用函数。

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

 

这里写图片描述
看一下动图就能粗略懂得快速排序的算法结构了

(1)将数组的第一个数定为 标记

(2)从后面开始比较,若 该数 比 标记数 大,则不管(因为我们的目的就是降序排序);若 该数 比 标记数 小,将该数进行位置转换,调到前面,现在 标记数 的那个位置----即与 标记数 互换位置

(3)再从前面开始比较,同理,若数 比 标记数 小,则不管;若 数 比 标记数 大,将该数进行位置互换,调到后面

以上是主要思路

进行完一次循环后,得到的结果是 在标记数的左端的数比标记数小,在右端的数比标记数大;

此时对 函数进行 递归调用        quick(第一位,i-1位)        quick(i+1位,最后一位)

 

 

#include<iostream>
using namespace std;
    int n;
    int sz[100];
void quick(int left,int right)
{
    int a,b,temp;
    if(left>right)
    {
        return ;
    }
    
    a=left;
    b=right;
    temp=sz[a];//标记数
    while (a<b)
    {
        while (sz[b]>=temp&&a<b)
        {
            b--;                    //如果比他大,符合条件,只需移动光标
        }
        if(a<b)
        {
            sz[a]=sz[b];            //将那个小的数提过来,放到他的位置
        }


        while (sz[a]<=temp&&a<b)
        {
            a++;                   //如果比他小,符合条件,只需移动光标
        }
        if(a<b)
        {
           sz[b]=sz[a];            //把那个大的拿过来 
        }   
    }
    sz[a]=temp;                    //别把标记数忘了,移动之后他在中间
    quick(left,a-1);               //对左边的数使用函数递归调用,再排序
    quick(a+1,right);              //对右边的数使用函数递归调用,再排序
}

int main()
{
    int i;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>sz[i];
    }
    quick(0,n-1);
    for (int j = 0; j < n; j++)
    {
         cout<<sz[j]<<" ";
    }
    
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值