快速排序&sort()用法

快速排序实现原理:

#include <iostream>
#include <algorithm>
using namespace std;
void quick_sort(int arry[],int maxlen,int op,int ed);
int main()
{
    int a[10]={2,1,7,4,6,8,2,3,1,0};
    //sort(a,a+10);
    quick_sort(a,10,0,10-1);

    for(int i=0;i<10;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    return 0;
}
void quick_sort(int arry[],int maxlen,int op,int ed)//第二个参数其实没毛用T_T
{
    int i,j;
    if(op<ed)
    {
        i=op+1;
        j=ed;
        while(i<j)
        {
            if(arry[i]>arry[op])//如果比较的数组元素大于基准数,则交换位置。
            {
                int temp;
                arry[j]^=arry[i];
                arry[i]^=arry[j];
                arry[j]^=arry[i];
                j--;
            }else
            {
                i++;
            }
        }
        //跳出循环后i=j  处理op和i位置的数
        if(arry[i]>=arry[op])// 这里必须要取等“>=”,否则数组元素由相同的值时,会出现错误!
        {
            i--;
        }
        if(i!=op)//当两个元素地址相等时,异或交换会出错,变成0
        {//交换
        arry[i]^=arry[op];
        arry[op]^=arry[i];
        arry[i]^=arry[op];
        }
        quick_sort(arry,maxlen,op,i);//递归
        quick_sort(arry,maxlen,j,ed);
    }
}

自定义sort()比较规则:

#include <iostream>
#include <algorithm>
using namespace std;
struct people
{
    int num;
    string name;
};
bool compare1(people a,people b)//自定义排序规则
{
    return a.num<b.num; //升序排列,>号为降序排列
}
int main()
{
    people a[3]={{2,"two"},{3,"three"},{1,"one"}};
    sort(a,a+3,compare1);//sort第三个参数传比较函数的地址
    for(int i=0;i<3;i++)
    {
        cout<<a[i].name<<endl;
    }
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
快速排序sort(通常指的是标准库函数`std::sort`在C++中或者`sort`在Python中的排序功能)都是高效的排序算法,但是它们的工作原理、性能特点以及使用场景有所不同。 ### 快速排序 快速排序是一种分治策略的排序算法,通过选择一个基准元素,将数组分为两个部分,使得左边的所有元素都小于等于基准值,右边的所有元素都大于等于基准值。然后对左右两边递归地应用快速排序过程。快速排序的平均时间复杂度为O(n log n),但在最坏的情况下(如已经完全有序或逆序的数据),其时间复杂度会退化到O(n^2)。 ### sort 在不同的语言环境下,`sort`的实现可能会有所不同: #### C++ 在C++中,`std::sort`通常是基于快速排序算法的优化版本,采用的是TimSort算法(一种混合了插入排序、二分查找等技术的高效排序算法)。它能够保证最坏情况下的时间复杂度为O(n log n)并提供稳定的排序结果。由于底层实现了优化,因此在大多数实际应用中,`std::sort`的表现比基本形式的快速排序更稳定且效率更高。 #### Python 在Python中,内置的`list.sort()`函数同样使用了TimSort作为内部实现。这也保证了其在各种数据分布下都能保持良好的性能,并提供稳定的排序结果。Python的解释器对其进行了深度优化,使其成为处理大数组排序的理想选择。 ### 性能比较 一般而言,在实际应用中,无论是哪种语言环境,`sort`(不论是C++的`std::sort`还是Python的`list.sort()`)都会比直接实现的基本形式快速排序更快、更稳定。这主要是因为它们采用了更高级的优化技术和更适合当前硬件特性的实现方法。 ### 使用场景 - **快速排序**适用于对算法实现有深入理解的情景,特别是在需要自定义排序规则或者是对内存使用特别敏感的场合。 - **sort**适用于希望获得标准化、高性能且无需额外维护的排序功能的情况,特别是对于大数据量和高稳定性要求的应用。 --- ### 相关问题: 1. 快速排序sort的主要区别是什么? 2. `sort`在实际编程中有哪些优点? 3. 对于特定数据结构或大规模数据集,如何选择更合适的排序算法? 以上内容旨在为您提供关于快速排序sort之间差异及选择的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值