数据结构与算法分析 收获总结 第7章 排序

这篇博客主要总结了数据结构与算法分析中的排序算法,包括插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序和基数排序。重点讨论了这些排序算法的时间复杂度、空间复杂度以及稳定性,并提供了部分算法的实现思路。还分享了针对特定场景如合并两个有序数组、查找中间子数组等的解决方案。
摘要由CSDN通过智能技术生成

先以老师上课所讲的经典面试题:
1.把两个排好序的数组,合并为一个数组,第一个数组后半部分刚好可以容纳第一个数组的元素,空间复杂度O(1)
解析:由于空间复杂度要求,所以不可再开一个temp数组之类的方法。

void sort(int Array1[],int n,int Array2[],int m)
{
     int p1=n-1,p2=m+n-1; 
     int t=m-1;
     while(p1!=p2)
     {
         if(p1==-1)
         {
             Array1[p2]=Array2[t];
             break;
         }     
         if(Array2[t]>=Array1[p1])
         Array1[p2--]=Array2[t--];
         else
         {
             Array1[p2--]=Array1[p1--];
         }
     }    

2.假设数组已经排好序,即如果把数组排好序,每个元素移动的距离不超过k,并且k相对于数组长度来说很小,请问选择什么排序法比较好。
3.判断数组中是否有重复值,空间复杂度为O(1)
4.荷兰国旗问题,对只包含0,1,2的整数数组进行排序,时间复杂度O(N),空间复杂度O(1)
解析:三个指针
5.在行和列都排好序的矩阵中找给定的数,时间复杂度O(M+N)
如:

        0 1 2 5
        2 3 4 7
        4 4 4 8
        5 7 7 9

解析:右上角开始,找稍大向下走,找稍小向左走
6.在给定数组中,找到中间需要排序的子数组,时间复杂度O(N),空间复杂度O(1)
如:1 3 5 6 4 7 2 8 9中子数组5 6 4 7 2需要排序

这一章的重点就是八大排序,根据以往考题,主要考察每个算法的执行过程,思想,方法以及时间(平均,最好,最坏),空间复杂度(辅助空间),以及通过理解每个算法来判断算法的稳定性(直接记住也行),考题里倒是没怎么涉及对每个算法代码的书写。

八大排序详解推荐这个超高阅读量帖子:
https://blog.csdn.net/hguisu/article/details/7776068
在这里插入图片描述
希尔排序的最好时间为n1.3次幂~n1.5次幂
自己的理解:
以下代码来自数据结构与算法分析(第三版)电子工业出版社
1.插入排序:从第二个开始,向之前序列插入当前元素,放在之前序列的正确位置

template<typename E,typename Comp>
void insertionsort(E  A[],int n){
   
  for(int i=1;i<=n;i++)  //插入第i个元素
    for(int j
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值