首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >快速排序

快速排序

作者头像
SakuraTears
发布2022-01-13 13:59:32
发布2022-01-13 13:59:32
5550
举报

快速排序的特点是他是原地排序(只需要一个很小的辅助栈),且长度为N的数组时间复杂度为NlgN。 快速排序是一种分治的算法,他将一个数组分成两个数组,将两部分独立排序,在快排中切分的位置取决于数组的内容。 取首元素为切分元素,比切分元素小的放到左边,比切分元素大的放到右边,再把两个数组切分,最后有序

代码语言:javascript
复制
void qsort(int a[], int lo, int hi)
{
    if (lo >= hi)
        return;
    int i, j, m, temp, mid;
    m = a[lo]; //切分元素
    i = lo; //下面循环时i和j就会先自增/自减1再判断,所以i为头元素,j为尾元素 - 1
    j = hi + 1;
    while (true)
    {
        while (a[++i] < m)
        {
            if (i == hi)//直到循环到右边界也没有找到比切分元素大的元素
                break;
        }
        while (a[--j] > m)
        {
            if (j == lo)//直到循环到左边界也没有找到比切分元素小的元素
                break;
        }
        if (i >= j)//当i的位置在j的右边,a[i] > a[j],不可以交换
            break;
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    temp = a[lo];
    a[lo] = a[j];
    a[j] = temp;
    mid = j;
    qsort(a, lo, mid - 1);
    qsort(a, mid + 1, hi);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年11月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档