基本排序算法---快速排序

1、快速排序
快排是一个不稳定的排序算法,时间复杂度和algorithm.h中的sort()函数差不多。思想简单,是一个递归的过程。,一趟排序流程如下,以升序为例:
1)、选第一个元素作为基准点。
while(i !=j)
2)、从后向前遍历,找到第一个小于基准点的元素,如A[j]
3)、从前向后遍历,找到第一个大于基准点的元素,如A[i]
4)、如果(i<j)交换两个元素
5)、交换基准点与A[i]
一趟排序结束,后续将区间进行分割,递归操作即可。

void quick_sort(int a[],int left,int right)
{
    //快速排序
    if(left>=right)
     //此处写成if(left>right),但是当剩一个元素时,不能立即return,在下一轮中才停止,如i=0,j=-1停
        return;
    int temp=a[left];
    int i=left,j=right;
    while(i<j)
    //此处也可写成 while(i!=j),逻辑是一样的,都是i=j时退出循环
    {
        while(a[j]>temp&&i<j)
            j--;
        while(a[i]<=temp&&i<j)
     //此处不可写成a[i]<temp,最开始i=0,是满足条件的应该后移。否则排序有错误
            i++;
        if(i<j)
            swap(a[i],a[j]);
    }
    swap(a[i],a[left]);
     //此处交换的是两个位置的值,不可简单的将a[i]=temp,那样的话会将原来i处的值淹没
    quick_sort(a,left,i-1);
    quick_sort(a,i+1,right);
}

函数测试:

int main()
{
    int n;
    cin>>n;
    int a[100005];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort1(a,0,n-1);
    for(int i=0;i<n;i++)
    {
        cout<<a[i];
    }
    return 0;
}

测试结果:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,585评论 0 52
  • 简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间 时间复杂度计算时间复杂度的方法: 用常...
    Teci阅读 4,773评论 0 1
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,016评论 0 2
  • 小时候的大年三十好不热闹,杀鸡宰鸭,腌鱼腊肉,瓜子水果,四冷十热,先敬祖宗再放鞭炮,小孩子在厨房外转来转去,拿着大...
    一本万利阅读 3,157评论 0 2
  • 前言 近日压力倍增,在图书馆自习,期望能够看更多的论文。休息期间找到一本算法的教材,从机器学习和人工智能的角度重温...
    惊喜黑洞阅读 5,977评论 0 11