参考回答:
最熟悉排序算法,常见的排序算法有以下几种
1、插入排序,即逐个处理待排序的记录,每个记录与前面已排序的子序列进行比较,将它插入子序列中正确位置,时间复杂度O(n^2),空间复杂度为O(1),是稳定排序,插入排序不适合对于数据量比较大的排序应用,但是如果量级小余千,那么插入排序还是一个不错的选择,
2、冒泡排序,它重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。他的时间复杂度和空间复杂度分别是O(n^2),空间复杂度是O(1)属于稳定排序,冒泡排序对于少数元素之外的数列排序是很没效率的。
3、选择排序,初始时在序列中找到最值元素,放到序列的其实位置作为已排序序列,再在剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。他的时间复杂度是O(n^2),空间复杂度是O(1)属于不稳定排序
4、shell排序,是插入排序的升级版,属于不稳定排序,希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。 假设有一个很小的数据在一个已按升序排好序的数组的末端。如果用复杂度为O(n^2)的排序(冒泡排序或直接插入排序),可能会进行n次的比较和交换才能将该数据移至正确位置。而希尔排序会用较大的步长移动数据,所以小数据只需进行少数比较和交换即可到正确位置。希尔排序的时间复杂度根据步长序列的不同而不同,空间复杂度O(1)
5、归并排序,归并排序的实现分为递归实现与非递归(迭代)实现。属于稳定排序,递归实现的归并排序是算法设计中分治策略的典型应用,我们将一个大问题分割成小问题分别解决,然后用所有小问题的答案来解决整个大问题。非html" target="_blank">递归(迭代)实现的归并排序首先进行是两两归并,然后四四归并,然后是八八归并,一直下去直到归并了整个数组。他的时间复杂度是O(nlogn)空间复杂度是O(n)
6、堆排序,其实现原理为首先将数组构造成一个最大/最小堆,将堆顶元素和堆尾元素互换,调出堆顶元素,重新构造堆,重复步骤直至堆中元素都被调出。堆排序的时间复杂度为O(nlogn)空间复杂度为O(1),属于不稳定排序。
7、快速排序,快排使用分治策略,首先从序列中挑出一个元素作为基准,然后把比基准小的元素放在一边,把比基准大的元素放在另一边,重复这个步骤,直至子序列的大小是0/1.快排的时间复杂度是O(nlogn)空间复杂度是O(logn)属于不稳定算法,对于快排的基准元素选取,可以采用三者取中法,三个随机值的中间一个。为了减少随机数生成器产生的延迟,可以选取首中尾三个元素作为随机值
排序算法的适用情况:
当n比较小且基本有序,可采用直接插入或冒泡,否则采用直接插入
当n较大,可以采用快排,归并,堆排序,快排是目前基于比较的内部排序中最好的方法,堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。 若要求排序稳定,则可选用归并排序。但前面介绍的从单个记录起进行两两归并的排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子序列,然后再两两归并之。因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的。
本文向大家介绍请你说一说你知道的排序算法及其复杂度相关面试题,主要包含被问及请你说一说你知道的排序算法及其复杂度时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、冒泡排序: 从数组中第一个数开始,依次遍历数组中的每一个数,通过相邻比较交换,每一轮循环下来找出剩余未排序数的中的最大数并“冒泡”至数列的顶端。 稳定性:稳定 平均时间复杂度:O(n ^ 2) 2、插入排序: 从待排序的n个记录
本文向大家介绍请你来介绍一下各种排序算法及时间复杂度相关面试题,主要包含被问及请你来介绍一下各种排序算法及时间复杂度时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 插入排序:对于一个带排序数组来说,其初始有序数组元素个数为1,然后从第二个元素,插入到有序数组中。对于每一次插入操作,从后往前遍历当前有序数组,如果当前元素大于要插入的元素,则后移一位;如果当前元素小于或等于要插入的元素,则将要
本文向大家介绍你知道哪些排序算法,这些算法的时间复杂度分别是多少,解释一下快排?相关面试题,主要包含被问及你知道哪些排序算法,这些算法的时间复杂度分别是多少,解释一下快排?时的应答技巧和注意事项,需要的朋友参考一下 考察点:快排 参考回答: 快排:快速排序有两个方向,左边的i下标一直往右走(当条件a[i] <= a[center_index]时),其中center_index是中枢元素的数组下标,
本文向大家介绍你知道什么是流体排版吗?说说它的原理是什么?相关面试题,主要包含被问及你知道什么是流体排版吗?说说它的原理是什么?时的应答技巧和注意事项,需要的朋友参考一下 在文档流中,内联元素按内联方向显示,即词语在依据文件写作模式的句子中表示的方向。块元素则一个接一个地显示,就像该文档的写作模式中的段落一样。因此在流体排版中,内联元素从左边开始一个接一个地显示,块元素从顶部开始向下显示并移动页面
本文向大家介绍写一个方法实现“交换排序算法”,并解释下时间复杂度和空间复杂度相关面试题,主要包含被问及写一个方法实现“交换排序算法”,并解释下时间复杂度和空间复杂度时的应答技巧和注意事项,需要的朋友参考一下
我不明白堆排序的空间复杂度是怎样的O(1)?虽然快速排序不使用任何额外的数组(即就地),但在最坏情况下其空间复杂度为O(n),在最佳情况下为O(lg n),因为在递归调用的后端使用堆栈。我说得对吗? 堆排序也是如此。虽然,它是就地的,但是由于Build-Heap函数调用Max-Heapify函数,所以它的空间复杂度应该等于Max-Heapify,即O(lg n)。不是吗?此外,稍后在根节点调用Ma