排序算法(C语言)

一.计数排序

计数排序顾名思义通过计数进行排序(只能对数组进行排序,有一定局限性,但效率高)

基本思路:通过创建计数数组(哈希表),对每个数出现的次数按大小顺序进行标记,然后以该顺序改变需要排序的数组

代码如上。

二.归并排序

时间复杂度:(nlogn)

稳定性:稳定

归并排序的原理就是分而治之

利用递归(也可以非递归)将一组数分成两组,每组数又再次细分成两组直至无法细分下去,将每一组内的数进行排序,递归回上一次分组,再次进行排序,直至排序完成。

以下是递归算法的代码

三.简单选择排序

空间复杂度:(1)

时间复杂度:O(n^2)

稳定性:不稳定

原理:将最小值与最大值分别找出分别移到左右两侧

四.快排

时间复杂度:O(nlogn)

稳定性:不稳定

原理:右边找到大于key的数左边找到小于key的数交换,最后相遇与key交换此时的key值就在其有序的位置上。经过递归后所有数都会有序。

注:如果从左找大,再从右找小,会有bug,因为会将比key大的数换到key上

快排的优化算法:

三数取中:如果数组的顺序接近或本就是有序,快排算法会进行大量没必要的递归,导致效率低下,取到合理的中位数的key可以减少效率的损失。

小区间优化:
在数组递归区间如果较小,就没必要进行递归,减小递归可以增加效率,如果在一定区间内则可以利用别的排序方法进行排序;

五.冒泡排序

时间复杂度;O(n^2)

稳定性:稳定

每次内循环都找到最大的数放入末尾。

循环至有序。

六.插入排序和希尔排序

时间复杂度:O(nlogn)

稳定性:不稳定

原理:选取一数不断比较插入到合适的位置

希尔排序:

时间复杂度:O(n^1.3)

稳定性:不稳定

原理:在插入排序基础上,进行了分组排序,进行的预排序可以解决插入排序在遇到倒序数组时效率低下的问题。


 

七.堆排序

时间复杂度:nlogn

利用建堆的方法进行排序;

向上调整法:

先用向上调整法使无序的数组调整成小堆,或大堆,之后首尾元素相换,尾元素即最大或最小值,保留最大或最小值,之后使剩余元素向下调整,重新找出最大或最小值,循环操作,可以排出有序数组

向下调整法:

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值