常见的排序算法实现及其复杂度分析(C语言版)

常见的排序算法实现及其复杂度分析(更新中…)

一、交换排序

(一)快速排序
代码实现
int Partition(int* nums,int low,int high){   //划分操作,每次划分将比枢轴元素小的元素放到前面,大的放到后面
    int p = nums[low]; //p表示枢轴元素
    while(low<high){
        while(low<high&&nums[high]>=p) --high;  
        nums[low] = nums[high];  //将比枢轴元素小的元素移到前面
        while(low<high&&nums[low]<=p) ++low;
        nums[high] = nums[low];  //将比枢轴元素大的元素移到后面
    }
    nums[low] = p;  //枢轴元素的最终位置
    return low;  //返回枢轴元素的位置
}

void QuickSort(int* nums,int low,int high){
    if(low<high){
        int pPos = Partition(nums,low,high); //pPos表示枢轴元素的下标
        QuickSort(nums,pPos+1,high);  //递归地对枢轴元素左右两个子表进行排序
        QuickSort(nums,low,pPos-1);
    }
}
稳定性

不稳定,在交换时元素地相对位置会发生变化

复杂度分析

时间效率:最坏为 O ( n 2 ) O(n²) O(n2),平均为 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)

最坏的情况与划分是否对称有关,原始序列基本有序或者基本无序

空间效率:最坏为 O ( n ) O(n) O(n),平均为 O ( l o g 2 n ) O(log_2n) O(log2n)

容量与递归调用的最大深度一致

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<Yesterday>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值