C语言——快速排序

C语言------快速排序

一、 含义

快速排序算法是在几种排序算法中效率最高的一个排序算法了,故称为快速排序,它的时间复杂度为:O(nlog2n),相比冒泡排序算法的O(n2)有很大的提升。

二、算法思想

1、选取一个基准元素(一般我们将待排序序列中的第一个元素选取为基准元素)

2、将其他元素与基准元素进行比较,比基准元素大的放到基准元素的右边,比基准元素小的放到基准元素的右边。(以基准元素为中心将元素重新分成两个序列,并返回基准元素的下标)

3、将新生成的两个序列继续执行1和2两步(此处可以用递归实现)

三、实现步骤

快速排序的算法步骤:
1.丛数列中挑出一个元素,一般都是左边的第一个数字,称为基准数;
2.创建两个指针,一个从前往后走,一个从后往前走;
3.先执行后面的指针,找出第一个比基准数小的数字;
4.在执行后面的指针,找出第一个比基准数大的数字;
5.交换两个指针指向的数字;
6.直到两个指针相遇;
7.将基准数跟指针指向的位置的数字交换位置,称之为:基准数归位;
8.第一轮结束后,基准数左边的数字都是比基准数小的,基准数右边的数字都是比基准数大的;
9.把基准数左边的看作是一个序列,把基准数右边的看作一个序列,按照刚刚的规则进行递归排序

代码实现

c 复制代码
int main()
{
    int arr[10] = {9,5,3,8,1,2,6,7,4,10};
    void quicksort(int a[10],int i,int j);  //函数的声明
 
    printf("排列前:");
    for(int i = 0; i < 10;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
 
    quicksort(arr,0,9);  //调用函数
 
    printf("排列后:");
    for(int i = 0; i < 10;i++)
    {
        printf("%d ",arr[i]);
    }
    system("pause");
    return 0;
}
 
void quicksort(int a[10],int first,int end)
{
    if(first > end)  //递归结束条件
    {
        return;
    }
    int i = first,j = end,flag = a[i],exchange = 0;
 
    while(i != j)
    {
        while(i < j && a[j] > flag)//只找小的,等于要过滤,找前判断right有没有走过
        {
            j--;
        }
 
        while(i < j && a[i] <= flag)
        {
            i++;
        }
        if(j > i)
        {
            exchange = a[i];
            a[i] = a[j];
            a[j] = exchange;
        }
    }
    a[first] = a[i];
    a[i] = flag;
    quicksort(a,first,i - 1);
    quicksort(a,i + 1,end);
}

总结:快速排序优点:排列速度快,比较简单;缺点:不稳定(如果数组是递增的有序数组,对它用快速排序需要N^2/2次操作)。

相关推荐
Lyyaoo.22 分钟前
【动态规划】【待更新】
java·数据结构·算法
AgentMaster30 分钟前
开源智能客服系统技术对比:从架构设计到生产部署的实战指南
大数据·人工智能·算法
weixin_307779131 小时前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab
wuminyu1 小时前
Markword在紧凑对象头上的实现原理剖析
java·linux·c语言·jvm·c++
萧西待水1 小时前
奥赛一本通 1451 棋盘游戏
算法·宽度优先
Niuguangshuo1 小时前
论文解读:Paraformer,非自回归中文 ASR 的并行 Transformer
算法·音视频·语音识别
潘潘的嵌入式日记1 小时前
位操作怎么写才不出错?置位、清位、翻转、取位一次讲清
c语言·嵌入式·寄存器·位操作
鹿角片ljp1 小时前
LeetCode 78:子集|回溯、选与不选、递归和path快照
java·数据结构·算法
hansang_IR2 小时前
【代数与组合数学 | 那忘算 5】生成函数 & 例题 & 卷积
c++·算法·多项式·生成函数·母函数
Zane19942 小时前
快速排序凭什么叫"快"排序?平均O(nlogn)背后,藏着一个能让它退化成O(n²)的选择
算法