c++中的快速排序

本文详细介绍了快速排序算法,包括其分治策略、选择分界点的方法以及C++代码实现。通过递归处理数组,快速排序是一种高效的排序算法。

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

一、介绍

快速排序是一个基于 分治 的排序方法,是非常重要且应用比较广泛的一种高效率排序算法。

二、原理

1.确定分界点,可以是数组左端点,右端点,中间点,也可以是随机值。

2.调整范围,设定一个分界点x后,让分界点将数组分为两部分,使得x左边的数都小于等于x,x右边的数都大于等于x。

3.递归排序,用递归处理左右两段

三、实现方法

 首先设定两个指正i和j分别指向数组的左右端两侧,这里之所以不是指向左右两端,是因为每次i和j每次循环都要先移动,所以一开始移动需要保证先在左右两侧。

先判断i和j的大小,若i小于等于j时跳出循环。然后先选择呢一个分界点x,这里可以是最左端点q[l],从第一个元素开始判断,若q[i]小于x时则指针i往后进一,直到q[i]大于等于x时停下,此时移动j,从最后一个元素开始判断,若q[j]大于x时则指正向前进一,直到q[j]小于等于x时停下,此时将q[i]和q[j]的值交换,然后继续循环。在此x分界点循环结束后,对两段分别快排,一直递归。

下面是模版:

void quick_sort(int q[],int l,int r)
{
    if (l>=r) return;
    int x=q[l],i=l-1,j=r+1;//i和j每次先移动
    while(l<j)
    {
        do i++ ;while(q[i]<x);
        do j-- ;while(q[j]>x);
        if (i<j) swap(q[i],q[j]);
    }
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}

若选择x为q[l]则下面递归的时候一定要是(q,l,j)和(q,j+1,r),可作为模版被下来 

下面是题解

#include<iostream>
using namespace std;
const int N = 1e6+10;
int n;
int q[N];

void quick_sort(int q[],int l,int r)
{
    if (l>=r) return;
    int x=q[l],i=l-1,j=r+1;//i和j每次先移动
    while(l<j)
    {
        do i++ ;while(q[i]<x);
        do j-- ;while(q[j]>x);
        if (i<j) swap(q[i],q[j]);
    }
    quick_sort(q,l,j);
    quick_sort(q,j+1,r);
}


int main()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%d",&q[i]);
    }
    quick_sort(q,0,n-1);
    for (int i=0;i<n;i++)
    {
        printf("%d ",q[i]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值