zoukankan      html  css  js  c++  java
  • 算法03

    • 排序算法的稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的
    • 那么之前我们学到的排序,选择排序,快速排序和堆排序是不稳定的  插入排序,冒泡排序和归并排序可以做到稳定,其实有人会考虑为什么要有排序的稳定性,我举一个小栗子:
    • 假如有一个表格类表,分别是  学号  班级  分数  第一次你按照分数排序,然后第二次你按照班级排序,这个时候如果你使用的是基于稳定的排序算法,相同班级的同学会在一起,而且相同班级内的分数也是排好序的。
    • 再来讲一下工程中的排序,听一个大佬说的以后我会考证一下,当一个数组长度很大,而且类型是基础类型(int double.......),会使用快速排序,当要排序的是自定义类型,里面是你自己定义的字段,而且是你自己定义的比较规则,那么会使用归并排序,但是当数组长度很小的时候,会使用插入排序,因为插入排序的常数项很低,其实这样一分析里面有一个坑,其实如果在数据量很大的时候,采用归并排序或者快速排序的话,一个很大的数据量在这两种算法下回慢慢被切成很小的数据量,当达到一个足够小的标准的时候,最后还是会使用到插入排序。
    • 归并排序的额外空间复杂度可以达到 O(1) 但是很难,不需要掌握,想了解的同学可以搜索“归并排序内部缓存法”
    • 其实快速排序也可以做到稳定性,但是也很难,论文级别,不要求掌握,有兴趣的同学可以搜索“ 01 stable sort”
    • 有一道面试题,一个数组中有奇数和偶数,要求将奇数放在左边,偶数放在右边,原来的次序不改变,时间复杂度为O(n)  额外空间复杂度为O(1),可能第一眼看过去会感觉这个问题很简单,但是其实不然,这个就像是快速排序的一个子过程,如果能够做出来这道题,那么你也可以让快速排序做到稳定性,但是我好想说过快速排序做到稳定性很难,嘻嘻,如果面试遇到了这道题,一个大佬告诉我直接怼他,并且告诉面试官这道题的来龙去脉,面试官并非良人,你甚至可以反问面试官,如果他也不会,你是可以举报他的.
    • 那么下面我们再来讨论一下你什么时候可以举报面试官,第一点:面试官阴阳怪气,甩情绪  第二点:他自己出的题目自己没有准备答案,如果他说是开放性的题目,那么他也应该要准备答案,只是期待你更好的答案,皮一下.

    下面讲一下桶排序,其实桶排序是一个基于非比较排序的大类,这个类里面有计数排序和基数排序,计数排序就是我们日常了解的桶排序一种很简单实现方法,自行百度,基数排序在以后的博客给出。

    题目:用数组实现一个栈,并且能够随时得到当前数据的最小值,操作时间复杂度是O(1):

    • 这道题,我们在入栈的时候准备两个栈,一个栈压入正常的数值,另一个栈存贮当前数据的最小值,然后我们就可以随时得到最小值了,两个栈弹出数据的时候同步弹出

    题目:使用队列实现栈结构

    • 我们准备两个队列,假如其中一个队列里面加入了n个元素,然后现在我们要得到最后一个元素,可以将先入队列的 n-1 个元素进入另一个队列,然后得到最后一个元素,拿到第 n -2 个元素也和上面一样,将 n-3 进入另一个空队列,然后得到第 n -2 个元素

    题目:使用栈实现一个队列结构

    • 我们使用两个栈,栈1 和 栈2 ,假设先往栈1 里面添加元素,然后我们将栈1的元素全部弹出并且压入栈2,这个时候栈2元素的弹出顺序就是和一个队列一样了,如果这个时候又有新的元素要进栈,让他进栈1,等到栈2的元素全部弹出后,才能将栈1的元素弹出到栈2,栈1就相当于一个接受器,然后栈2就是一个转换器,将栈的顺序转为队列
  • 相关阅读:
    Chrome开发者工具中Elements(元素)断点的用途
    最简单的SAP云平台开发教程
    Java实现 LeetCode 495 提莫攻击
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 492 构造矩形
  • 原文地址:https://www.cnblogs.com/luojianyi/p/9508705.html
Copyright © 2011-2022 走看看