排序算法专题
排序算法面试专题
插入排序
描述一下插入排序?
每次将一个待排序的记录按其关键字大小插入前面已经排好序的子序列中。
O(N^2) 稳定排序
描述一下希尔排序?
先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。
O(N^1.3) 不稳定排序
交换排序
描述一下冒泡排序?
从后往前两两比较相邻元素的值,若为逆序,则交换他们,直到序列比较完。
O(N^2) 稳定排序
描述一下快速排序?
在数组中选一个元素作为基准(通常选用数组第一个元素作为基准);
将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;
对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。
O(nlog2N) 不稳定排序
平均性能最优的排序算法 当初始表基本有序的情况下时间复杂度最差,为O(N^2)。
选择排序
描述一下简单选择排序?
每一趟在后面N-I+1个元素中选取关键字最小的元素与第i个元素交换,直到n-1趟做完。
O(N^2) 不稳定排序
描述一下堆排序?
首先建初堆,将其调整成大根堆。
将堆顶元素输出,然后重新调整堆使其保证大根堆性质。
再输出堆顶元素。
重复此过程,直到堆中只剩一个元素为止。
O(nlog2N) 不稳定排序
描述一下归并排序?
把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
O(nlog2N) 稳定排序
描述一下基数排序?
是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。
O(n*k) 稳定排序