学习总结和杂感

####一点题外话。周五晚上参加了“大神0距离"活动,深刻体会到了自主努力学习对自己未来的改变是多重要。最近一直心浮气躁,直到听完实验室大神的分享,我才意识到自己当前的状态无比的差,为一些乱七八糟的事儿整日不在状态是在严重浪费时间。

Linux实验室的刘嘉辉学长凭着对计算机的热爱,不断地学习,参加比赛获奖,去西班牙交流活动,拿到实习offer。同时他也享受着生活,做着自己喜欢与真正想要做的事情。对于计算机行业来说,这是一件很困难的事情。

听完交流,感慨良多。迷迷糊糊的乱学习真是会让人心里对未来有一丝迷茫甚至恐惧。近日一直在考虑一个问题,大一快结束了,我学到了什么?这几日总在想,总觉得自己什么都没有学到,没有什么擅长或拿得出手的东西,反而心情变差的有些影响我的日常学习与计划,现下唯有调整好自己,重新出发。

无论是好是坏,在自己真正努力过后,都接受。
要相信没有白走的路,每一步,都算数。

##学习总结
部分常用排序的总结包括(冒泡排序,快速选择排序,堆排序,简单选择排序,树形选择排序)

  1. 冒泡排序
    (c语言基础算法,必须掌握的一种排序。)
    给定一串数字:
    <1>、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
    <2>、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
    <3>、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
    <4>、持续每次对越来越少的元素比较,重复上面的步骤,直到没有任何一对数字需要比较,这样一串数字就排好大小了。

  2. 堆排序
    堆排序是排序过程中,将向量中存储的数据看作是一颗完整的二叉树。利用堆这个数据结构而设计的一种排序算法。属于一种选择排序。
    堆的每一个节点的值都大于或者等于左右孩子节点的值,称为大根堆。

    基本思想:
    将待排序列构造成一个大根堆,此时整个序列最大值是堆顶的根节点,将其与末尾元素进行交换,此时末尾变成了最大值,然后将剩余元素继续构造成一个堆,这样会得到n个元素的次小值,再次交换,然后反复执行,就得到了一个有序序列。
    在这里插入图片描述
    举个详细例子:
    给定一数组a[5]={3,6,8,5,7}:
    插入6的时候,6大于他的父结点3,即a[1]>a[0],则交换;此时,保证了0~1位置是大根堆结构,如下图:在这里插入图片描述
    插入8的时候,8大于其父结点6,即a[2]>a[0],则交换;此时,保证了0~2位置是大根堆结构。剩下的以此类推,直到该数组成为一个大根堆结构。

  3. 快速选择排序
    先说说选择排序:
    选择排序的基本思想:
    每一趟(例如第i趟)在后面的n-i+1个待排序列的元素中,
    选取关键字最小的元素作为有序子序列的第i个元素。直到第n-1趟做完排序元素只剩下一个,就不用再选了。

    快速选择排序:
    **通过两个不相邻元素的交换,消除待排序列中的多个逆序,从而大大加快了排序的速度。**这也是相比于冒泡排序的优点所在。通过一次交换就可能消除多个排序。

    基本思想:
    找一个枢轴,也就是一串数字中的一个数(最好不要是给定一串数里的最大值),然后以枢轴为中介线,一边都小于他,另一边都大于他,然后对两边的区间继续进行划分,所以如果枢轴的选取是最大或者最小值,选择它就没有起到划分的作用。快速排序的效率也会降低。所以每次在选择枢轴时,在序列的第一个,中间或者最后三个数字里面进行选择是最好不过的。可以保证每次划分接近均等。

  4. 简单选择排序
    基本思想:
    假设排序表为 a[n] ,第i趟排序即从a[i,n] 中选择关键字最小的元素与 a[i] 交换,每一趟排序可以确定一个元素的最终位置,这样经过 n-1 趟排序就可以使整个排序表有序。

  5. 树型选择排序
    树形选择排序,是在简单选择排序的基础上进行了改进,在简单选择排序中,首先从n个记录中选择关键字最小的记录下来,需要n-1次比较,从n-1个记录中选择关键字最小的记录下来,需要n-2次比较,,,,然鹅每一次都没有利用上一次的比较结果,所以这一排序保存了比较过程中的大小关系。

    基本思想:
    先把待排序列n个关键字进行两两比较,取出较小者。然后再在a[n/2]个较小者中采取同样的方法,进行比较选出每两个里面的最小的一个,如此反复,直到选择出所有元素中最小的那一个。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值