快速排序

本文详细介绍了快速排序算法的基本思想、步骤及性能分析,并提供了C++实现示例。快速排序是一种高效的排序算法,在平均情况下时间复杂度为O(nlogn),但其稳定性较差。

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

1.快速排序(QuickSort)的基本思想是:通过一次排序后,将原数据分成两个部分,其中一个部分全部比另一个部分都要小或者都要大,然后递归对这两个部分进一步快速排序,最后得到数据的有序序列。

2.算法过程 设待排数组是r[0]...r[n-1],首先任选一个数据(通常是数组的第一个元素)当做监测点。然后将所有小的数据放在他的前面,所有比它大的数据放在后面。最后递归快速排序两边的数据。快速排序不是一种稳定的排序算法。

PS:稳定的排序:冒泡排序,插入排序,归并排序,二叉树排序,桶排序,基数排序。

     不稳定的排序:选择排序,希尔排序,堆排序,快速排序。

一趟快排的算法:

(1)设置两个变量i、j,初始时,i=0,j=n-1;

(2)把第一个数据当做监测点,key = r[0];

(3)从j开始向前搜索,找到第一个小于key 的值r[j],将r[j]的值赋给r[i],即r[i]=r[j];

(4)从i开始往后搜索,找到第一个大于key 的值r[i],将r[i]的值赋给r[j],即r[j]=r[i];

(5)重复3,4步,直到i=j,r[i]=key.

3.性能分析

最坏情况下的时间复杂度是O(n^2);

平均及最好情况下的时间复杂度都为O(nlogn);

4.快速排序C++代码

#include<iostream>
using namespace std;

void QuickSort(int *r,int low,int high)
{
    int i = low;
    int j = high;
    int key=r[low];
    if(i>=j)
    {
        return;
    }
    while(i<j)
    {
        while(i<j&&key<=r[j])
            j--;//一直向前找,直到找到第一个大于监测点key的值
        r[i]=r[j];
        
        while(i<j&&key>=r[i])
            i++;//一直向后找,直到找到第一个小于监测点key的值
        r[j]=r[i];
    }
    r[i]=key;    
    QuickSort(r,low,i-1);
    QuickSort(r,i+1,high);
}
int main()
{
    int arr[]={1,4,2,5,7,9,3,6,8};
    for(int i=0; i<9; i++)
    {
        cout<<arr[i]<<" ";
    }
    QuickSort(arr,0,8); 
    cout<<endl<<"快速排序后:"<<endl;
    for(int i=0; i<9; i++)
    {
        cout<<arr[i]<<" ";
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值