前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是快速排序?

什么是快速排序?

作者头像
跋扈洋
发布2022-12-03 09:42:59
4690
发布2022-12-03 09:42:59
举报
文章被收录于专栏:物联网知识

概念

快速排序的基本思想是基于分治法的,在待排序表中任选一个基准元素,通过一趟排序将待排序划分为独立的两部分,前半部分所有元素均比枢轴元素小,后半部分所有元素均比枢轴元素大,此时枢轴元素就放在了最终的位置,然后分别对两个字表递归重复上面的过程,直至每部分内只有一个元素或空为止,即所有元素放在了其最终位置上。

算法实现

快速排序比冒泡排序优良的地方在于它的每次比较不是相邻元素的一次一次比较,而分别从两端开始”探测”的,先从右往左找一个小于枢轴元素的数,放到枢轴的左边,再从左往右找一个大于枢轴的数,放在枢轴的右边。

代码语言:javascript
复制
#include <stdio.h>
#include <windows.h>
#include <stdint.h>
void Quick_sort(int a[],int low,int high);
int Partition(int a[],int low,int high);
int main()
{
    int k;
    int num[9]={9,8,7,4,6,5,1,2,3}; 
    int sortsize=sizeof(num)/sizeof(num[0]);
    Quick_sort(num,0,sortsize);
    for(k=0;k<sortsize;k++)
    printf("\n%d",num[k]);
    system("pause");
    return 0;
}
代码语言:javascript
复制
void Quick_sort(int a[],int low,int high)
{
    if(low<high)
    {
        int pivotpos=Partition(a,low,high);
        Quick_sort(a,low,pivotpos-1);
        Quick_sort(a,pivotpos+1,high);

    }
}
int Partition(int a[],int low,int high)
{
    int i,j;
    int temporary;
    temporary=a[low];
    while(low<high)
    {
    while(low<high&&a[high]<temporary)
    high--;
    a[low]=a[high];
    while(low<high&&a[low]>temporary)
    low++;
    a[high]=a[low];
    }
    a[low]=temporary;
    return low;

}

快速排序的效率相对而言比较优良,空间复杂度最好情况下为O(log2n),最坏情况下,因为要进行n-1次递归调用,所以为O(n),平均情况下,大致为O(log2n)。 快速排序的运行时间与划分是否对称有关,快速排序的最坏情况发生在两个区域分别包含n-1个元素和0个元素时,这种最大限度的不对称性若发生在每层递归上,即对应于初始排序表基本有序或者基本逆序时,就得到最坏情况下的时间复杂度O(n^2)。理想情况下,时间复杂度为O(nlog2n)。快速排序是所有内部排序算法中平均性能最优的排序算法。是一种不稳定的排序方法。 在快速排序算法中,并不产生有序子序列,但每趟排序后会将枢轴元素放在其最终的位置上。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网知识 微信公众号,前往查看

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

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

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