c语言复杂度为o(n)的排序算法,几种常见的排序算法原理及时空复杂度

484935f567b900885679eeb908b94844.png

排序算法分为两大类:简单排序算法和高级排序算法假设一下元素都有n个

《1》常见的简单排序算法

(1)冒泡法:从最后一个元素开始依次和前面的元素比较;最后一个和前面所有的比较完后,倒数第二个再和前面的比较

最坏情况下:循环次数为n-1,交换次数n-1,时间复杂度为O(n^2);

(2)交换法:从第一个元素开始,用当前的元素依次和后面的元素相比较;

最坏情况下:循环次数为n-1,交换次数为n-1,时间复杂度为O(n^2);

(3)选择法(我的通俗叫法:占座法):先占第一个位置,依次占满座位;

最坏情况下:循环次数为n-1(把前n-1个座位都占了,也就排好序了)交换次数不一定,时间复杂度为O(n^2);

(4)插入法(也叫直接插入排序):从第二个元素开始依次抽出,插入到相应的位置

最坏情况下:循环次数为n-1(抽出n-1次),交换次数不一定,时间复杂度为O(n^2);

《2》常见的高级排序算法有

(1)快速排序(也是一种交换排序):关键在于先在数组中选择一个数字,接下来把数组中的数字分为两部分,比选择小的移到数组的左边,比选择数字大的移到数组的右边

(2)希尔排序(也是一种插入排序):将所有的数据分组,小组内进行排序,之后重新分组,组内数据增多,重新排序(每个步骤都使用直接插入排序)。举一个形象的例子:还是排队打饭,学校有好多班级,不能所有班级都一起打,先按班级(分组)排好队,最后所有的班级再组成一个大组,再一个一个的排着打饭。

(3)堆排序(也是一种选择排序):堆分为大顶堆(父节点大于子节点)和小顶堆(父节点小于子节点),根节点是最大的节点(或者最小的节点),每次挑出根节点之后,将剩余的节点进行重新建堆。

(4)归并排序:就是相邻两个元素组成一个组,组内进行排序,之后再将组内元素增加,循环比较

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值