数据结构-排序算法

   日期:2024-12-29     作者:vh1m6       评论:0    移动:http://ljhr2012.riyuangf.com/mobile/news/11916.html
核心提示:一、插入排序(从小到大为例) ​ 算法思想:(直接)插入排序在我看来就是一小段一小段的从前到后分段的排序。

一、插入排序(从小到大为例)

​ 算法思想(直接)插入排序在我看来就是一小段一小段的从前到后分段的排序。从第二个元素开始,设置下标为i,将每轮循环的第i个元素当作Key与其前面的元素做对比。找到下标j对应的arr[j]的值比Key小而arr[j+1]的值比Key大的位置,将其插入,然后继续下一次的循环直到结束。

数据结构-排序算法

​ 时间复杂度:O(n²)

 
 

二、折半插入排序(从小到大为例)

​ 算法思想:折半插入排序是插入排序基于二分法的优化。直接插入排序在每次与第i个元素前面的元素做对比的时候是顺序对比的,而在i前面的元素是排序完成后的,故只需通过二分法找到第i个元素值应该插入的位置即可。

​ 时间复杂度:O(n²)

 

三、希尔排序(从小到大

​ 算法思想:希尔排序在我看来是采用类似极限思想的对插入排序的优化。此算法设置一个间隔,间隔一般取数组长度的1/2向下取整。根据此间隔将本来的数组分组,然后在组内使用插入排序,同时减半间隔大小直到间隔为1,达到基本有序后最后一次插入排序,完成排序。

 

四、冒泡排序(从小到大

​ 算法思想:若传入的数组元素个数为n,则默认需要进行n-1趟排序。每趟排序过程中对元素两两进行比对,符合条件进行交换,将最大或最小的值向冒泡一样排序到数组一端。可设置一个类型的变量flag来判断数组是否进行了交换,若无发生交换则代表有序。

​ 时间复杂度:O(n²)

 

五、快速排序(从小到大

​ 算法思想:快排的思想就是通过设定一个基准值(一般为数组第一个值)来通过low和high两个指针来对比数组中的值确定基准值base的最终排序位置(low为低位,high为高位)。在此期间先向左移动high指针直到找到一个比基准值base小的元素,将此元素放到当前low的位置;随后开始向右移动low指针直到找到比base大的元素,再将此元素放到当前high的位置。按此规律一直进行下去直到low和high指向同一位置,即为base应该在的最终排序位置。这样就将其划分为了另外两个子表,再递归的将划分出的两个子表快排,直到low>high,即整个序列有序。

​ 时间复杂度:最好情况:O() 最坏情况:O(n²)

​ 快速排序是所有内部排序算法中平均性能最优的排序算法。

 

六、简单选择排序(从小到大

​ 算法思想:依次从数组元素中找出最小(或最大)的元素放在首位。最后只剩一个元素时不需要再对比排序 。

​ 空间复杂度:O(1) 时间复杂度:O(n²) 稳定性:不稳定

 

七、堆排序

​ 算法思想:堆排序就是将序列建立成大根堆(或小根堆)的形式,然后将堆顶(也就是数组最大值,建立成大根堆后的数组的第一个元素)与数组的最后一个元素呼互换,以此来将数组最大值放到数组的最后边。然后数组的长度减一,对前面的n-1个元素继续上面的操作,直到数组排序完成。

​ 注:大顶堆即为父节点大于左右孩子的完全二叉树,将大根堆形成的完全二叉树层序遍历即为大根堆的数组。

 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类最新资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
最新资讯
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号